단어 수가 적은 문자열이 있다고 가정합니다. 문자열에서 단어 위치를 바꿔야 합니다. 따라서 문자열이 "빠른 갈색 여우가 게으른 개 위로 점프"와 같은 경우
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
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"