Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
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.
1 从后往前遍历string
2 保存单词,然后需要逆转,在保存到结果中
注意题目中的clarification,处理好其中的空格。
利用了两个额外string保存中间结果。空间复杂度为O(n).
时间复杂度是O(n)
class Solution {
public:
void reverseWords(string &s) {
string res;
for(int i = s.length()-1;i>=0;) {
while(i>=0 && s[i] == ' ')
i--;
if(i<0)
break;
string t;
while(i>=0 && s[i] != ' ')
t.push_back(s[i--]);
if(!res.empty())
res.push_back(' ');
reverse(t.begin(),t.end());
res.append(t);
}
s = res;
}
};