剑指 Offer 58 - I. 翻转单词顺序
思路#
方法一:分割 + 倒序#
时间复杂度:O(n),n为s的长度。
1 class Solution { 2 public: 3 string reverseWords(string s) { 4 string t = ""; 5 stack<string> strStack; 6 for(int i = 0; i < s.length(); ++i) { 7 if(s[i] == ' ') { 8 if(t != "") { 9 strStack.push(t); 10 t = ""; 11 } 12 } else { 13 t.push_back(s[i]); 14 } 15 } 16 17 if(t != "") 18 strStack.push(t); 19 20 t = ""; 21 while(!strStack.empty()) { 22 t += strStack.top(); 23 if(strStack.size() > 1) { 24 t.push_back(' '); 25 } 26 27 strStack.pop(); 28 } 29 30 return t; 31 } 32 };
方法二:原地翻转单词顺序#
1 class Solution { 2 public: 3 string reverseWords(string s) { 4 // 反转整个字符串 5 reverse(s.begin(), s.end()); 6 7 int n = s.size(); 8 int idx = 0; 9 for (int start = 0; start < n; ++start) { 10 if (s[start] != ' ') { 11 // 填一个空白字符然后将idx移动到下一个单词的开头位置 12 if (idx != 0) s[idx++] = ' '; 13 14 // 循环遍历至单词的末尾 15 int end = start; 16 while (end < n && s[end] != ' ') s[idx++] = s[end++]; 17 18 // 反转整个单词 19 reverse(s.begin() + idx - (end - start), s.begin() + idx); 20 21 // 更新start,去找下一个单词 22 start = end; 23 } 24 } 25 s.erase(s.begin() + idx, s.end()); 26 return s; 27 } 28 };
参考#
相似题目#
分类:
剑指Offer(第2版)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南