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());
    }

posted @ 2024-08-09 18:51  Neking  阅读(5)  评论(0编辑  收藏  举报