题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
题目还是比较简单,一个一个字符地处理
Ⅰ 我的方法 代码:
class Solution { public: string ReverseSentence(string str) { if(str.length()==0) return ""; vector<string> vres; string temp; string res; for(int i = 0;i < str.length();i++){ if(str[i]==' '){ vres.push_back(temp); temp.clear(); } else temp += str[i]; } //不能忘记加下面这一句啊,否则因为原来式子最后没有空格,就会落下原式的最后一个单词 vres.push_back(temp); for(int j = vres.size()-1;j >= 0;j--){ res += vres[j]; res += ' '; } //最后需要长度-1是因为上一步在最后多加进去一个空格 return res.substr(0,res.length()-1); } };Ⅱ 更简洁一点的方法 不需要用到vector 代码:
class Solution { public: string ReverseSentence(string str) { string res = "", tmp = ""; for(unsigned int i = 0; i < str.size(); ++i){ if(str[i] == ' ') res = " " + tmp + res, tmp = ""; else tmp += str[i]; } if(tmp.size()) res = tmp + res; return res; } };