Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
两次翻转
class Solution {
public:
void reverseWords(string &s) {
int size = s.size();
if(size<=0)
return;
int index = 0;
while(s[index] == ' '){
++index;
}
int left = index;
index = size - 1;
while(s[index] == ' '){
--index;
}
int right = index;
for(int i = left;i <= right;){
if(i > left && s[i-1] == ' ' && s[i] == ' '){
s.erase(i-1,1);
--right;
}
else{
++i;
}
}
int start = left,end = left;
for(int i = left;i <= right+1;++i){
if(i == right+1 || s[i] == ' '){
reverses(start,end-1,s);
++end;
start = end;
}
else{
++end;
}
}
reverses(left,right,s);
s = s.substr(left,right - left + 1);
}
void reverses(int begin,int end,string &s)
{
while(begin<end)
{
char tmp = s[begin];
s[begin] = s[end];
s[end] = tmp;
begin++;
end--;
}
}
};