返回

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

发布时间:2022-09-22 23:00:30 385
# java# java

题目

给定一个字符串 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)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线