LeetCode 541. 反转字符串 II
题目描述
思路分析
解法一:分段反转(推荐)
核心思路:
- 每 2k 个字符为一组,只反转前 k 个字符。
- 若剩余字符不足 k,则全部反转;若介于 k 和 2k 之间,仅反转前 k。
- 使用字符数组便于原地交换。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示字符串长度。
- 空间复杂度:O(n),使用字符数组存储。
class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
for (int start = 0; start < chars.length; start += 2 * k) {
int left = start;
int right = Math.min(start + k - 1, chars.length - 1);
while (left < right) {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
return new String(chars);
}
}
func reverseStr(s string, k int) string {
chars := []byte(s)
for start := 0; start < len(chars); start += 2 * k {
left := start
right := start + k - 1
if right >= len(chars) {
right = len(chars) - 1
}
for left < right {
chars[left], chars[right] = chars[right], chars[left]
left++
right--
}
}
return string(chars)
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 344. 反转字符串 | 简单 | 双指针 |
| 345. 反转字符串中的元音字母 | 简单 | 双指针 |
| 557. 反转字符串中的单词 III | 简单 | 字符串 |
| 151. 反转字符串里的单词 | 中等 | 字符串 |
| 186. 反转字符串中的单词 II | 中等 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
