541. 反转字符串 II

541. 反转字符串 II

题目链接
代码随想录

分析

这个题直接用模拟即可,直接用 while 循环,i 为每次循环处理的子串的起点,初始值为 0,循环条件为 i<chars.length,每次循环,我们需要能确定反转的范围,起点为 i,终点其实是 i+k-1chars.length-1 中小的那一个,确定了范围之后,操作完反转,直接将 i 加上 2*k,然后继续循环即可。
有一个很容易迷惑的地方就是,题目中说反转前 k 个字符,如果其实索引为 i,那么终点索引其实是 i+k-1,而不是 i+k。
算法的时间复杂度是 O(n) n 为字符串的长度。

解题

class Solution {
    public String reverseStr(String s, int k) {
        char[] sChar = s.toCharArray();
        int i = 0;
        while(i<sChar.length){
            int j = Math.min(i+k-1,sChar.length-1);
            int left=i,right=j;
            while(left<right){
                char temp = sChar[right];
                sChar[right] =  sChar[left];
                sChar[left] =  temp;
                left++;
                right--;
            }
            i+=2*k;
        }
        return new String(sChar);
    }
}

相关题

344. 反转字符串