题目:
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
源码:
class Solution {
public String reverseStr(String s, int k) {
if (s == null || s.length() == 0) {
return new String();
}
if (k == 1) {
return s;
}
char[] chars = s.toCharArray();
int i = 0;
// 如果 i > chars.length
// 说明没有2*k个字符了
while (i < chars.length) {
int start = i; // 开始反转的位置
// 减去1是应为前面已经包括了要反转的 i
int end = i + k - 1; // 结束反转的位置
if (end >= chars.length) {
end = chars.length - 1;
}
reverse(chars, start, end);
i = i + 2 * k;
}
return new String(chars);
}
public void reverse(char[] chars, int x, int y) {
while (x < y) {
char temp = chars[x];
chars[x] = chars[y];
chars[y] = temp;
x++;
y--;
}
}
}