LeetCode | 541 Reverse String II
分析
以2k作为游标步长,反转游标前半部分的字符串,后半部分保留;尾部部分余留长度,如果在[k,2k)直接处理情况跟前述一样,如果不是则直接返回。
在这道题里面,还是回到数组部分提到的循环不变量法则,在2k长度这个游标移动过程中,处理完全一致:2k步长移动,只处理[2i,2i+k]部分,即便是尾部也是如此,不满足就表明2*i+k这个坐标我取不到,就直接退出。
反转字符串用双指针思路完全OK
这个部分的衍生学习,对我而言重点不在于算法,而在于对Java中String相关类进行系统性整理
主方法
public void reverseStringII(String s, int k) {
StringBuilder sb = new StringBuilder(s);
int n = s.length();
for (int i = 0; i < n; i += 2*k) {
int left = i;
int right = Math.min(i + k - 1, n - 1);
while (left < right) {
char temp = sb.charAt(left);
sb.setCharAt(left, sb.charAt(right));
sb.setCharAt(right, temp);
left++;
right--;
}
}
System.out.println(sb.toString());
}