剑指offer44:翻转单词顺序列
程序员文章站
2022-05-20 21:42:23
1 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am ......
1 题目描述
牛客最近来了一个新员工fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事cat对fish写的内容颇感兴趣,有一天他向fish借来翻看,但却读不懂它的意思。例如,“student. a am i”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“i am a student.”。cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
2 思路和方法
先将字符串整体翻转,再一次翻转每个单词。 字符串整体翻转:.tneduts a ma i,
3 c++核心代码
1 class solution { 2 public: 3 string reversesentence(string str) { 4 int len = str.size(); 5 int start = 0; 6 for(int i = 0; i < len; i ++) 7 { 8 if(str[i] == ' ') 9 { 10 reverse(str.begin()+start, str.begin()+i); 11 start = i+1; 12 } 13 if(i == len-1) 14 { 15 reverse(str.begin()+start, str.end()); 16 } 17 } 18 reverse(str.begin(), str.end()); 19 return str; 20 } 21 };
1 class solution { 2 public: 3 string reversesentence(string str) { 4 int len = str.length(); 5 string &temp = str; 6 reserve(temp,0,len-1); 7 int s = -1; 8 for(int i=0;i<len;i++){ 9 if(str[i] == ' '){ 10 reserve(temp,s+1,i-1); 11 s = i; 12 } 13 } 14 reserve(temp,s+1,len-1); 15 return str; 16 } 17 void reserve(string &s,int start,int end){ 18 char temp; 19 while(start < end){ 20 temp = s[start]; 21 s[start] = s[end]; 22 s[end] = temp; 23 start++; 24 end--; 25 } 26 } 27 };
参考资料
https://blog.csdn.net/weixin_40271182/article/details/84281680