541. 反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于 k 个,则将剩余字符全部反转。
- 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = “abcdefg”, k = 2
 输出:“bacdfeg”
示例 2:
输入:s = “abcd”, k = 2
 输出:“bacd”
思考
这次自己把简单问题复杂化了,也懒得重写了,就这吧
设置两个指针
- back:一次移动2k位
- pre:始终位于back-k
利用s.length()/(k*2)获得back需要移动i次
如果i<0,即back一次都不需要移动,字符串长度位于0-2k之间
如果i>0,即back需要移动
 public static String reverseStr(String s, int k) {
        if(k==1) return s;
        char[] chars=new char[s.length()];
        // 定义back移动i次 2k
        int i=s.length()/(k*2);
        int pre=0;
        int back=0;
        int index=0;
        // 情况一
        if(i==0){
            //  介于 k - 2k 之间
            if(s.length()-pre>k){
                for (int j=k-1;j>=0;j--){
                    chars[index] = s.charAt(j);
                    index++;
                }
                for (int j=k;j<s.length();j++){
                    chars[index] = s.charAt(j);
                    index++;
                }
            }
            else {
                for (int j=s.length()-1;j>=0;j--){
                    chars[index] = s.charAt(j);
                    index++;
                }
            }
        }
        // 情况二
        if(i>0){
            while(i!=0){
                int begin=back;
                back=back+2*k;
                pre=back-k;
                for (int j=pre-1;j>=begin;j--){
                    chars[index]=s.charAt(j);
                    index++;
                }
                for (int j=pre;j<back;j++){
                    chars[index]=s.charAt(j);
                    index++;
                }
                i--;
            }
            // 判断剩余多少
            if(s.length()-back>k){
                for (int j=back+k-1;j>=back;j--){
                    chars[index]=s.charAt(j);
                    index++;
                }
                for (int j=back+k;j<s.length();j++){
                    chars[index]=s.charAt(j);
                    index++;
                }
            }else {
                for (int j=s.length()-1;j>=back;j--){
                    chars[index]=s.charAt(j);
                    index++;
                }
            }
        }
        return new String(chars);
    }










