一、 题目
给出一个字符串,以单词为单位反转字符串。
例如 i am echo
返回 echo am i
二、 分析
仔细分析会发现,对于中间结果我们需要保存,即我们得保证以单词为单位。另外我们需要考虑到下面的情况
1、中间有多个空格的处理
2、没有空格的字符串
3、反转后开头和结尾不能有空格
4、最后的结果单词间得有空格
所以,由以上我们有两种思路,一种就是以单词为单位反转,这个需要用到vector,reverse即可,需要两次for循环,如下:
class Solution { public: void reverseWords(string &s) { vector<string> des; if(s.empty()) return; int len = s.size(); for(int i = 0; i < len; i++){ if(s[i] == ' ') continue; string word; while(i < len && s[i] != ' '){ word += s[i]; i++; } des.push_back(word); } reverse(des.begin(), des.end()); if(des.empty()) s = ""; else { s.clear(); int j ; for(j = 0; j < des.size() -1; j++){ s += des[j]; s += ' '; } s += des[j]; } } };
另一种思路是使用特殊的存储结构——栈,那么此时我们就不需要再反转了,直接顺序保存即可,代码如下:
class Solution { public: void reverseWords(string &s) { stack<string> des; if(s.empty()) return; int len = s.size(); for(int i = 0; i < len; i++){ if(s[i] == ' ') continue; string word; while(i < len && s[i] != ' '){ word += s[i]; i++; } des.push(word); } if(des.empty()) s = ""; else { s.clear(); int j ; int length = des.size(); for(j = 0; j < length -1; j++){ s += des.top(); des.pop(); s += ' '; } s += des.top(); } } };
leetcode:Reverse Words in a String
原文:http://blog.csdn.net/zzucsliang/article/details/44573763