剑指 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 58 - II. 左旋转字符串

posted @   拾月凄辰  阅读(76)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
主题色彩