- 思路
这道题首先要明确不同的情况做不同的操作,(1)当少于k全部反转;(2)当大于k小于2k,反转前k个;(3)当等于2k,反转前k个。
整体思路就是用双指针,一个指头,一个指尾然后进行计数。
class Solution {
void reverse(char[] arr, int start, int end) {
char temp;
while (start < end) {
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
public String reverseStr(String s, int k) {
int len = s.length();
char[] arr = s.toCharArray();
int start = 0, i;
for (i = 0; i < len; i++) {
// 等于2k
if (i - start + 1 == 2 * k) {
reverse(arr, start, start + k - 1);
start = i + 1;
}
}
// 小于k
if (i - start < k) {
reverse(arr, start, i - 1);
return new String(arr);
}
// 大于k小于2k
if (i - start < 2 * k) {
reverse(arr, start, start + k - 1);
return new String(arr);
}
return new String(arr);
}
}