LeetCode541. 反转字符串 II

版权声明: https://blog.csdn.net/weixin_40550726/article/details/82988031

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

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

要求:

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

思路:len为s字符串的长度,将s字符串按每个字符串长度等于2*k分为n段,如果剩下最后一段字符长度小于2*k,另做处理。将这n段字符串按要求反转(反转前k个字符),剩下的最后一段再进行反转。

class Solution {
    public String reverseStr(String s, int k) {
   
        int len=s.length();  //字符串长度
        int count=len/(2*k); //每2*k为一段字符串,count是段数
        int remainder=len%(2*k);//s字符串中,每2*k为一段字符串,remainder是余下的字符串的长度
        char[] chars=s.toCharArray();

        //将s字符串中长度为2*k的前count段字符串子串按要求反转
        for(int i=0;i<len-remainder;i+=2*k){
            reverseCharArrays(chars,i,i+k-1);
        }

        //反转最后剩余的一段字符串
        if(remainder<k){
            //长度小于k,全部反转
            reverseCharArrays(chars,len-remainder,len-1);
        }else{
            //长度大于k,反转前k个字符即可
            reverseCharArrays(chars,len-remainder,len-remainder+k-1);
        }
        return new String(chars);
    }
    /**
     * 反转从startIndex到endIndex这一段字符数组
     * @param chars
     * @param startIndex
     * @param endIndex
     */
    public  void reverseCharArrays(char[] chars,int startIndex,int endIndex){
        while(startIndex<endIndex){
            char tmp=chars[endIndex];
            chars[endIndex]=chars[startIndex];
            chars[startIndex]=tmp;
            startIndex++;
            endIndex--;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40550726/article/details/82988031
今日推荐