【剑指offer】翻转单词顺序列

题目链接:翻转单词顺序列


题意:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

 

题解:先翻转整个字符串,再对每个单词再进行反转,以空格为界。这里如果自己重写一个翻转函数会省事一些。

 

代码:

 1 class Solution {
 2 public:
 3     void Reverse(string &str,int begin,int end){
 4         while(begin < end){
 5             swap(str[begin++],str[end--]);
 6         }
 7     }
 8     string ReverseSentence(string str) {
 9         int len = str.length();
10         if(len == 0)    return str;
11         //整体翻转
12         reverse(str.begin(),str.end());
13         int begin = 0,end = 0;
14         int index = 0;
15         while(index < len){
16             //空格跳过
17             while(index < len && str[index] == ' ')    index++;
18             //找到单词翻转
19             begin = end = index;
20             while(index < len &&  str[index] != ' '){
21                 index++;    end++;
22             }
23             Reverse(str,begin,end-1);
24         }
25         
26         return str;
27     }
28 
29 };

 

posted @ 2020-03-04 23:30  甜酒果。  阅读(166)  评论(0编辑  收藏  举报