题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
题解:
翻转句子,但是单词本身的顺序是对的,所以只能先找空格,空格之间的顺序不用变换
用一个中间变量tmp,用来存放一个完整单词,知道遇到空格时,才会把tmp合并到最终结果中,并清空tmp
在倒序寻找单词的时候,要用tmp = str[i] + tmp; 这里是因为单词本身顺序是对的,如果用tmp += str[i],就会把单词的顺序给反过来
class Solution {
public:
string ReverseSentence(string str) {
if(str.size() == 0)
return str;
int i=0, j=str.size();
while(i<j && str[i]==' ')
i++;
if(i == j)
return str;
string res = "";
string tmp = "";
bool hasword = false;
for(int i=str.size()-1; i>=0; i--){
//倒序寻找第一个单词
if(str[i] != ' '){
tmp = str[i] + tmp; // 这里就把单词翻转过来了
hasword = true;
}
//遇到空格说明找到了第一个单词,那么把这个单词放到结果中,一定要记得在结果中加一个空格,并清空tmp
else if(str[i] == ' ' && hasword){
res += tmp;
res += " ";
tmp = "";
hasword = false;
}
}
if(tmp != "")
res += tmp;
return res;
}
};