단어 수가 적은 문자열이 있다고 가정합니다. 문자열에서 단어 위치를 바꿔야 합니다. 따라서 문자열이 "빠른 갈색 여우가 게으른 개 위로 점프"와 같은 경우
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
getString() 함수를 정의합니다. 이것은 s를 입력으로 사용하며 다음과 같이 작동합니다. -
-
i :=0, j :=s – 1의 크기
-
동안 s[i] =' ' 및 i
-
j>=0이고 s[j] =' '일 때 j를 1만큼 감소
-
ret :=빈 문자열
-
i <=j에 대해 i를 1 증가
-
ret의 크기가 0이 아니고 ret의 마지막 요소가 ' '이고 s[i]가 ' '이면 다음 반복으로 이동합니다.
-
렛 :=렛 + s[i]
-
-
reverseWords()라는 다른 메서드를 정의합니다. 이것은 s를 입력으로 사용합니다.
-
j :=0
-
범위 0에서 s – 1의 크기에 있는 I에 대해 각 단계에서 i :=j
를 설정합니다.-
s[i]가 비어 있으면 j :=i + 1
-
그렇지 않으면
-
j + 1
-
x :=i 및 y :=j
-
동안 x
-
s[x]와 s[y] 교환, x 1 증가 및 1 감소
-
-
j를 1 증가
-
-
-
기본 방법에서 다음을 수행하십시오 -
-
문자열 s
반전 -
역단어
-
반환 getString(s)
예시(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end());
reverseWordss(s);
return getString(s);
}
string getString(string s){
int i = 0;
int j = s.size() - 1;
while(s[i] == ' ' && i < s.size()) i++;
while(j >= 0 && s[j] == ' ') j--;
string ret = "";
for(;i <= j; i++){
if(ret.size() && ret.back() == ' ' && s[i] == ' ')continue;
ret += s[i];
}
return ret;
}
void reverseWordss(string& s){
int j = 0;
for(int i = 0; i < s.size() ;i = j){
if(s[i] == ' '){
j = i + 1;
}
else{
while(j + 1 < s.size() && s[j + 1] != ' ') j++;
int x = i;
int y = j;
while(x < y){
swap(s[x], s[y]);
x++;
y--;
}
j++;
}
}
}
};
main(){
Solution ob;
cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog"));
} 입력
"The quick brown fox jumps over a lazy dog"
출력
"dog lazy a over jumps fox brown quick The"