题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
解题思路 一开始,我认为给定的句子,是杂乱的没有什么规律的排序。后来才知道,给的字符串中句子,就是单词前后翻转的。是我想复杂了😂
仔细观察就会发现,先将每个单词翻转,然后就是将整个字符串翻转就能得到正确结果。
其中关键,就是怎样将每个单词翻转。当然是根据每个单词直间的空格 来做区分啦 。
代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 class Solution { public : string ReverseSentence (string str) { string result = str; int length = result.size (); if (length == 0 ) return "" ; result += ' ' ; int mark = 0 ; for (int i = 0 ; i < length + 1 ; i++) { if (result[i] == ' ' ) { Reverse(result, mark, i - 1 ); mark = i + 1 ; } } result = result.substr(0 ,length); Reverse(result, 0 , length - 1 ); return result; } void Reverse (string &str, int begin , int end ) { while (begin < end ) swap(str[begin ++], str[end --]); } };
参考博文链接:https://cuijiahua.com/blog/2018/01/basis_44.html