给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2 输出: "bacdfeg"
要求:
- 该字符串只包含小写的英文字母。
- 给定字符串的长度和 k 在[1, 10000]范围内。
https://leetcode-cn.com/problems/reverse-string-ii/description/
class Solution {
public String reverseStr(String s, int k) {
char[] cs = s.toCharArray();
int len = cs.length;
//将字符串以每份长度为k分开
int part = len / k;
//遍历每一部分
for (int i = 0; i <= part; i++) {
//只有第偶数份需要倒序
if (i % 2 == 0) {
//每份的开头索引
int start = i * k;
if (start < len) {
//定义每份的结尾索引
int end;
//遍历的长度,取1/2
int limit;
//最后一份只能最多只能到结尾
if (i == part) {
end = len - 1;
limit = (len - start) / 2;
} else {
end = start + k - 1;
limit = k / 2;
}
//倒序更换子母
for (int j = 0; j < limit; j++) {
char temp = cs[start + j];
cs[start + j] = cs[end - j];
cs[end - j] = temp;
}
}
}
}
return String.valueOf(cs);
}
}