LeetCode 186. 反转字符串中的单词 II
题目描述
思路分析
解法一:翻转两次(推荐)
核心思路:
- 先整体反转字符串。
- 再逐个单词反转,恢复单词内部顺序。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示字符数组长度。
- 空间复杂度:O(1),原地操作。
class Solution {
public void reverseWords(char[] s) {
reverse(s, 0, s.length - 1);
int start = 0;
for (int i = 0; i <= s.length; i++) {
if (i == s.length || s[i] == ' ') {
reverse(s, start, i - 1);
start = i + 1;
}
}
}
private void reverse(char[] s, int l, int r) {
while (l < r) {
char tmp = s[l];
s[l] = s[r];
s[r] = tmp;
l++;
r--;
}
}
}
func reverseWords(s []byte) {
reverseBytes(s, 0, len(s)-1)
start := 0
for i := 0; i <= len(s); i++ {
if i == len(s) || s[i] == ' ' {
reverseBytes(s, start, i-1)
start = i + 1
}
}
}
func reverseBytes(s []byte, l int, r int) {
for l < r {
s[l], s[r] = s[r], s[l]
l++
r--
}
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 151. 反转字符串中的单词 | 中等 | 字符串 |
| 186. 反转字符串中的单词 II | 中等 | 字符串 |
| 557. 反转字符串中的单词 III | 简单 | 字符串 |
| 344. 反转字符串 | 简单 | 双指针 |
| 541. 反转字符串 II | 简单 | 模拟 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!