题目描述:牛客最近来了一个新员工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;
}
};