JZ44 翻转单词顺序列**
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路
两步走
- 先把整体句子翻转
- 再把单词进行翻转
这样只需要写一个翻转函数(用首尾指针的方法)
在第二步中,需要找到空格的位置;其次,还有什么时候结束的问题,也就是循环结束条件
代码
class Solution {
public:
string ReverseSentence(string str) {
ReverseWord(str, 0, str.size() - 1);
int begin = 0, end = 0;
while (end<str.size())
{
while (str[end] != ' ' && str[end] != '\0') //找到空格
{
end++;
}
ReverseWord(str, begin, end - 1); //翻转单词
end++;
begin = end; //下一个单词的开始
}
return str;
}
void ReverseWord(string &res, int begin, int end) //整体翻转
{
char temp;
while (begin < end)
{
temp = res[begin];
res[begin] = res[end];
res[end] = temp;
begin++;
end--;
}
}
};