LeetCode 剑指 Offer 58 - I. 翻转单词顺序
题目描述

思路分析
解法一:分割 + 逆序拼接(推荐)
核心思路:
- 先去除首尾空格,并按多个空格分割成单词数组。
- 逆序拼接单词,中间用单个空格连接。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示字符串长度。
- 空间复杂度:O(n),用于存储单词数组。
class Solution {
public String reverseWords(String s) {
s = s.trim();
if (s.isEmpty()) {
return "";
}
String[] parts = s.split("\\s+");
StringBuilder sb = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
sb.append(parts[i]);
if (i > 0) {
sb.append(' ');
}
}
return sb.toString();
}
}
import "strings"
func reverseWords(s string) string {
parts := strings.Fields(s)
for i, j := 0, len(parts)-1; i < j; i, j = i+1, j-1 {
parts[i], parts[j] = parts[j], parts[i]
}
return strings.Join(parts, " ")
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 151. 反转字符串中的单词 | 中等 | 字符串分割、翻转 |
| 557. 反转字符串中的单词 III | 简单 | 逐词翻转 |
| 186. 反转字符串中的单词 II | 中等 | 原地操作、双指针 |
| 344. 反转字符串 | 简单 | 双指针、原地翻转 |
| 541. 反转字符串 II | 简单 | 模拟 |
| 58. 最后一个单词的长度 | 简单 | 字符串遍历 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!