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.
经典的题目,注意题中的空格问题,首尾不能有空格,也不能有连续的空格
class Solution {
public:
void trim(string &s){
//去除首尾空格
s.erase(s.begin(),find_if(s.begin(),s.end(),[](char c){return c!=' ';}));
s.erase(find_if(s.rbegin(),s.rend(),[](char c){return c!=' ';}).base(),s.end());
//去除重复空格
s.erase(unique(s.begin(),s.end(),[](char l,char r){return l==r && l==' ';}),s.end());
}
void reverseWords(string &s) {
std::reverse(s.begin(),s.end());
string::iterator wordBegin = s.begin();
while(wordBegin<s.end()){
string::iterator spaceIta = find(wordBegin,s.end(),' ');
reverse(wordBegin,spaceIta);
wordBegin = spaceIta+1;
}
trim(s);
}
};