题目
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) {
int len=s.length();
stack<string> str;
if(len==0) return;
string n="";
for(int i=0;i<len;i++){
if(s[i]!=' '){
n=n+s[i];
}
else if(n!=""){
str.push(n);
n="";
}
if(i==len-1 && n!=""){
str.push(n);
}
}
int slen=str.size();
string ss="";
if(slen>0){
for(int i=0;i<slen-1;i++){
ss.append(str.top());
str.pop();
ss.append(" ");
}
ss.append(str.top());
str.pop();
}
s=ss;
}
};