541. 反转字符串II

双指针

class Solution {
    public String reverseStr(String s, int k) {

        char[] chars = s.toCharArray();

        /**
         * 循环的间隔设置为2k,如果最后的区间小于k,全部反转;大于k小于2k则反转前k个
         * 每次右边界设置为i + k - 1,如果不足k个就取最后一个元素
         */
        for (int i = 0; i < chars.length; i += 2 * k) {

            int left = i;
            int right = Math.min(i + k - 1, chars.length - 1);
            char temp;

            while (left < right){

                temp = chars[left];
                chars[left] = chars[right];
                chars[right] = temp;
                left++;
                right--;
            }
        }

        return new String(chars);
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

https://leetcode-cn.com/problems/reverse-string-ii/

posted @ 2022-02-19 18:25  振袖秋枫问红叶  阅读(35)  评论(0)    收藏  举报