字符串简单1 种解法
#541反转字符串 II
每计数 2k 个字符,反转其中前 k 个;不足 k 个时反转全部剩余字符。
#字符串#双指针#模拟
解题主线
01
块起点每次增加 2k,反转终点取 min(start + k - 1, n - 1)。
解法 1:分块双指针反转
把字符串转为字符数组,对每个 2k 块的前 k 个字符执行原地反转。
时间复杂度
O(n)
空间复杂度
O(n),字符数组与返回字符串
java
final class Solution {
public String reverseStr(String s, int k) {
if (k <= 0) throw new IllegalArgumentException("k must be positive");
char[] chars = s.toCharArray();
for (int start = 0; start < chars.length; start += 2 * k) {
reverse(chars, start, Math.min(start + k - 1, chars.length - 1));
}
return new String(chars);
}
private void reverse(char[] chars, int left, int right) {
while (left < right) {
char temporary = chars[left];
chars[left++] = chars[right];
chars[right--] = temporary;
}
}
}把字符串转为字符数组,对每个 2k 块的前 k 个字符执行原地反转。
边界与易错点
- k 必须为正,否则步长 2k 会导致死循环。
- 不足 2k 但至少有 k 个字符时,只反转前 k 个。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
str/Q541_reverseStrII.java