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 reverseWords(string &s) {
stack <char> word1;
stack <char> word2;
int i,j,len = s.size();
//string res = "";
if(s == "") return;
for(j=0; j<len ;j++){
if(s[j]==' ') continue;
for(i=j; i<len && s[i] != ' '; i++)
word2.push(s[i]);
while(!word2.empty()){
word1.push(word2.top());
word2.pop();
}
if(i<len) word1.push(' ');
j=i;
}
if(word1.empty()){
s="";
return;
}
while(!word1.empty() && word1.top() == ' ') word1.pop();
i=0;
while(!word1.empty()){
s[i]=word1.top();
word1.pop();
i++;
}
s.resize(i,' ');
}
};