1.题目
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
2.思路
可以考虑先对整个字符串反转,然后对其中的每个word反转,或者倒过来,先对每个word反转,然后对整个字符串反转。要注意处理原始字符串里多余的空格,比如输入“ hello word ” ,应当输出 “word hello”,而不是“ word hello ”
3.代码
class Solution {
public:
//先对每个word反转,然后对整个字符串反转
void reverseWords(string &s) {
int i=0, j=0;//i记录原始字符串下标,j记录新的字符串下标
int l=0;
int len=s.length();
int wordcount=0;
while(true){
while(i<len && s[i] == ' ') i++; // 除去前面多余的空格
if(i==len) break;
if(wordcount) s[j++]=' '; //word 间隔
l=j;
while(i<len && s[i] != ' ') {s[j]=s[i]; j++; i++;}
reverse(s.begin()+l,s.begin()+j);
wordcount++;
}
s.resize(j);
reverse(s.begin(),s.end());
}
};