0
点赞
收藏
分享

微信扫一扫

刷题力扣541-反转字符串2

题目

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
 
如果剩余字符少于 k 个,则将剩余字符全部反转。
 
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
 
示例:
 
输入: s = "abcdefg", k = 2
输出: "bacdfeg"

思路:

规则有很多,其一,每隔2k字符,前k个字符进行反转;
其二,剩余字符如果小于2k但大于等于k,反转前k个
其三,剩余字符小于k的,全部反转。
根据这三个规则,我们考虑对字符串数组进行遍历,因为本字符串都是每隔2k个字符进行操作,所以用for循环遍历可以考虑每次增加2k个。一步一步的写,如果不知道判断条件如何处理边界,可以手动代入一个例子去解释。

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();     //将字符串转变为字符串数组
        //1、每隔2k个字符,前k个字符进行反转
        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){
        for(; i < j; i++, j--){
            char temp = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
        }
    }
}
举报

相关推荐

0 条评论