1,题目要求
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
2,题目思路
对于这道题,要求将一个单词语句翻转。
语句翻转,要求不改变单词的顺序。
如果我们使用翻转的方法, 可以采用两次翻转的办法:
首先,对于字符串从前往后进行翻转,然后,再针对每个单词进行翻转即可。
或者,我们可以直接遍历,然后构建即可。
3,代码实现
1,翻转
class Solution {
public:
string ReverseSentence(string str) {
if(str.size() == 0)
return str;
reverse(str.begin(), str.end());
int start = 0,end = 0;
while(start!=str.size()-1){
if(str[start] == ' '){
start++;
end++;
}
else if(str[end] == ' '){
reverse(str.begin()+start, str.begin()+end);
start = end;
}
else if(end == str.size()-1){
reverse(str.begin()+start, str.end());
break;
}
else
end++;
}
return str;
}
};
2,直接遍历
class Solution {
public:
string ReverseSentence(string str) {
string res = "", tmp = "";
for(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;
}
};