1. 题目
2. 思路
(1) 双指针法
- 利用快慢指针寻找反转区间,利用左右指针进行反转,注意快指针的越界情况即可。
(2) 双指针法优化
- 在外层循环中,每次定位到反转区间的起始位置,然后利用左右指针进行反转,注意右指针的越界情况即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
int fast = 0;
int slow = 0;
while (slow < s.length()) {
for (int i = 0; i < k; i++) {
fast++;
if (fast == s.length()) {
break;
}
}
int left = slow;
int right = fast - 1;
while (left < right) {
char temp = chars[left];
chars[left++] = chars[right];
chars[right--] = temp;
}
for (int i = 0; i < k; i++) {
fast++;
}
slow = fast;
}
return String.valueOf(chars);
}
}
class Solution1 {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
for (int i = 0; i < s.length(); i += 2 * k) {
int left = i;
int right = Math.min(i + k - 1, s.length() - 1);
while (left < right) {
char temp = chars[left];
chars[left++] = chars[right];
chars[right--] = temp;
}
}
return String.valueOf(chars);
}
}