翻转单词顺序列
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 };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了