力扣工作周刷题 - 541. 反转字符串 II

2020.10.18
原题:点击此处
拓展:反转字符串I

这道题其实更像在训练怎么把代码写的更简洁。。
题目有三个地方会反复利用:
1、判断是否应该反转;
2、反转字符串
3、是否已经离开边界

本题时间复杂度为O(N)
本体空间复杂度为O(1)

因此设计了两个函数,用来防止代码累赘:
1、反转字符串

    public void reverse(char[] target,int start,int end){
        //反转
        while(start < end){
            char temp = target[start];
            target[start] = target[end];
            target[end] = temp;
            start++;
            end--;
        }
    }

2、是否已经离开边界

    public int checkBorder(int start,int len,int k){
        if(start + k - 1 <= len){
            return start + k - 1;
        }else{
            return len;
        }
    }

核心代码:

    public String reverseStr(String s, int k) {
        int start = 0;
        int len = s.length()-1;
        int end =checkBorder(start,len,k);
        char[] chs = s.toCharArray();
        int batch = 1;
        while(start <=  len){
            //奇数次
            if(batch % 2 == 1){
             reverse(chs,start,end);
            }
            batch += 1;
            start = end + 1;
            //边界检测
            end =checkBorder(start,len,k);
        }
        return String.valueOf(chs);
    }

你可能感兴趣的:(字符串,算法,字符串,leetcode)