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.
Subscribe to see which companies asked this question
1.方法一
class Solution {
public:
void reverseWords(string &s) {
stringstream ss(s);
ss>>s;
string tmp;
while(ss>>tmp){
s=tmp+" "+s;
}
if(s[0]==' ') s="";
}
};
2.方法二
class Solution {
public:
void reverseWords(string &s) {
int len=s.size();
int i=0,j=0,k=0;
int wordNum=0;
while(true){
while(i<len&&s[i]==' ') i++;
if(i==len) break;
if(wordNum) s[j++]=' ';
k=j;
while(i<len&&s[i]!=' '){
s[j]=s[i];
j++;i++;
}
reverseWord(s,k,j-1);
wordNum++;
}
s.resize(j);
reverseWord(s,0,j-1);
}
private:
void reverseWord(string &s,int i,int j){
while(i<j){
swap(s[i++],s[j--]);
}
}
};