题
思
一些细节考虑清楚就行了。
代码
class Solution {
public String reverseStr(String s, int k) {
char[] arr = s.toCharArray();
// 处理所有完整的2k区域
for (int i = 0; i < arr.length - arr.length % (2 * k); i += 2 * k) {
for (int j = i; j < i + k / 2; j++) {
if (2 * i + k - 1 - j < arr.length) {
swap(arr, j, 2 * i + k - 1 - j);
}
}
}
// 尾部剩余不足2k的情况
int last = s.length() % (2 * k);
if (last < k && last > 1) {
for (int i = arr.length - last; i < arr.length - last / 2; i++) {
swap(arr, i, 2 * arr.length - last - 1 - i);
}
} else if (last >= k) {
for (int i = arr.length - last; i < arr.length - last + k / 2; i++) {
swap(arr, i, 2 * arr.length - 2 * last + k - i - 1);
}
}
return new String(arr);
}
private void swap(char[] arr, int i, int j) {
char temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}