leetcode :541. 反转字符串 II

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

提示:

该字符串只包含小写英文字母。
给定字符串的长度和 k 在 [1, 10000] 范围内。

思路:

1.k = 1时,无反转操作,直接返回原字符串

2.k > 1时,将字符串转为char[] ,分段处理,每次计算出beginInx和endInx,然后进行局部反转即可

注意:计算endInx时,考虑结束位置的处理,即,当剩余长度不足k时,endInx为charArray.lengrh - 1

实现:

class Solution {
    public String reverseStr(String s, int k) {
        if(k == 1)  return s;
        char[] charArr = s.toCharArray();
        int num = 0;
        while(true){
            int beginInx = 2 * k * num;
            int endInx = reverseCharArr(charArr,beginInx,k);
            if(endInx == charArr.length - 1)  break;
            num++;
        }
        return  String.valueOf(charArr);
    }

    private int reverseCharArr(char[] charArr,int beginInx,int k){
        int endInx = charArr.length - 1 - beginInx >= k ? beginInx + k - 1 : charArr.length - 1;
        int endInxChange = endInx;
        for(int i = beginInx ; i<endInxChange;i++){
            char tem = charArr[i];
            charArr[i] = charArr[endInxChange];
            charArr[endInxChange] = tem;
            endInxChange--;
        }
        return endInx;
    }
}

  

class Solution {
    public String reverseStr(String s, int k) {
        if(k == 1)  return s;
        char[] charArr = s.toCharArray();
        int num = 0;
        while(true){
            int beginInx = 2 * k * num;
            int endInx = reverseCharArr(charArr,beginInx,k);
            if(endInx == charArr.length - 1)  break;
            num++;
        }
        return  String.valueOf(charArr);
    }

    private int reverseCharArr(char[] charArr,int beginInx,int k){
        int endInx = charArr.length - 1 - beginInx >= k ? beginInx + k - 1 : charArr.length - 1;
        int endInxChange = endInx;
        for(int i = beginInx ; i<endInxChange;i++){
            char tem = charArr[i];
            charArr[i] = charArr[endInxChange];
            charArr[endInxChange] = tem;
            endInxChange--;
        }
        return endInx;
    }
}
posted @ 2020-05-18 17:24  星辰河流  阅读(152)  评论(0编辑  收藏  举报