leetcode:Reverse Words in a String

一、题目

给出一个字符串,以单词为单位反转字符串。

例如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();}}};

绚丽的民族风情,悠久的历史文化。抛开尘世的纷扰,

leetcode:Reverse Words in a String

相关文章:

你感兴趣的文章:

标签云: