LeetCode 151. 反转字符串中的单词
题目描述
思路分析
解法一:去空格 + 反向拼接(推荐)
核心思路:
- 先扫描字符串,提取每个单词(忽略多余空格)。
- 再从后往前拼接单词,单词之间添加一个空格。
- 只进行一次线性遍历与拼接。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示字符串长度。
- 空间复杂度:O(n),用于存储单词列表与结果。
import java.util.*;
class Solution {
public String reverseWords(String s) {
List<String> words = new ArrayList<>();
int i = 0;
int n = s.length();
while (i < n) {
while (i < n && s.charAt(i) == ' ') {
i++;
}
if (i >= n) {
break;
}
int j = i;
while (j < n && s.charAt(j) != ' ') {
j++;
}
words.add(s.substring(i, j));
i = j;
}
StringBuilder sb = new StringBuilder();
for (int k = words.size() - 1; k >= 0; k--) {
sb.append(words.get(k));
if (k != 0) {
sb.append(' ');
}
}
return sb.toString();
}
}
func reverseWords(s string) string {
words := make([]string, 0)
n := len(s)
i := 0
for i < n {
for i < n && s[i] == ' ' {
i++
}
if i >= n {
break
}
j := i
for j < n && s[j] != ' ' {
j++
}
words = append(words, s[i:j])
i = j
}
if len(words) == 0 {
return ""
}
res := words[len(words)-1]
for i := len(words) - 2; i >= 0; i-- {
res += " " + words[i]
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 186. 反转字符串中的单词 II | 中等 | 双指针 |
| 557. 反转字符串中的单词 III | 简单 | 双指针 |
| 344. 反转字符串 | 简单 | 双指针 |
| 151. 反转字符串中的单词 | 中等 | 字符串 |
| 6. Z 字形变换 | 中等 | 模拟 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
