力扣541 反转字符串2

题目:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

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

思路:

跟着题目意思走,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符(可调用344中的反转函数),其他做剪枝处理。

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        
        for(int i=0;i<ch.length;i+=2*k){
            // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
             if (i + k <= ch.length) {
                reverse(ch, i, i + k -1);
                continue;
            }
            // 3. 剩余字符少于 k 个,则将剩余字符全部反转
            reverse(ch, i, ch.length - 1);
        }
        return new String(ch);
    }

    public void reverse(char[] ch,int i,int j){//反转字符串
        while(i<j){
            char temp=ch[i];
            ch[i]=ch[j];
            ch[j]=temp;
            i++;
            j--;
        }
    }
}

 

posted @ 2022-12-13 20:53  壹索007  阅读(19)  评论(0编辑  收藏  举报