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--; } } };