【剑指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 };