一、题目
给出一个字符串,以单词为单位反转字符串。
例如iam echo
返回 echoami
二、分析
仔细分析会发现,对于中间结果我们需要保存,即我们得保证以单词为单位。另外我们需要考虑到下面的情况
1、中间有多个空格的处理
2、没有空格的字符串
3、反转后开头和结尾不能有空格
4、最后的结果单词间得有空格
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();}}};
绚丽的民族风情,悠久的历史文化。抛开尘世的纷扰,