JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
方法1:普通方法,遇到‘ ’就取出来赋值。
1 class Solution { 2 public: 3 string ReverseSentence(string str) { 4 if(str.size()<1) return ""; 5 string::iterator left=str.end()-1; 6 string::iterator right=str.end(); 7 string s; 8 while(left!=str.begin()){ 9 if(*left==' '){ 10 for(string::iterator it=left+1;it<right;it++){ 11 s+=*it; 12 } 13 s+=' '; 14 right=left; 15 left--; 16 continue; 17 } 18 left--; 19 } 20 for(string::iterator it=left;it<right;it++) 21 s+=*it; 22 return s; 23 } 24 };
方法二:先局部翻转,再统一翻转,同上一题翻转字符串。
i记录字符,j记录‘ ’
1 class Solution { 2 public: 3 string ReverseSentence(string str) { 4 for(int i = 0, j = 0; i < str.length() && j < str.length();){ 5 while(i < str.length() && str[i] == ' ') ++i; 6 j = i; 7 while(j < str.length() && str[j] != ' ') ++j; 8 reverse(str, i, j - 1); 9 i = j; 10 } 11 reverse(str, 0, str.length() - 1); 12 return str; 13 } 14 void reverse(string& str, int b, int e){ 15 if(b >= e) return; 16 while(b < e){ 17 char tmp = str[b]; 18 str[b] = str[e]; 19 str[e] = tmp; 20 b++; 21 e--; 22 } 23 } 24 };