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.
题目解析:
题目中要删除多余的空格,有一种比较简单的方法,先将s字符串赋给一个临时字符串tmp,将头尾空格略去,两个字间的空格只复制一次。然后对tmp进行常规操作。这样需要两遍遍历。
也可以临时设一个结果字符串,和一个临时的字串。一点一点处理
class Solution {
public:
void reverseWords(string &s) {
string tmp;
for(int i = s.size()-1;i >= 0;i--){
while(i >= 0 && s[i] == ' ')
i--;
if(i<0)
break;
if(!tmp.empty())
tmp.push_back(' ');
string word;
while(i>=0 && s[i]!=' ')
word.push_back(s[i--]);
reverse(word.begin(),word.end());
tmp.append(word);
}
s = tmp;
}
};