题目:
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
c++代码:
class Solution {
public:
void reverseOneWord(string &s, int start, int end){
while(start<end){
swap(s[start++],s[end--]);
}
}
void reverseWords(string &s) {
int i=0; //快
int j=0; //慢
int len=s.size();
int word_count=0;
while(i<len){
while(i<len && s[i]== ' '){ //找到下一个不为空的字符串
i++;
}//while
if(i>=len){
break;
}
if(word_count>0){ //如果不是第一个单词,那么每个单词前都需要加一个空格
s[j++]=' ';
}
int start=j;
for(;i<len && s[i]!=' ';i++,j++){ //从i开始的单词,移动到从j开始
s[j]=s[i];
}
reverseOneWord(s, start, j-1); //翻转当前单词
word_count++;
}//while
s.resize(j); //去掉最后一个单词后面的空字符串
reverseOneWord(s, 0, j-1); //翻转整个单词
}
};