LeetCode【541】反转字符串 II

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

示例:

输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
要求:

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

class Solution {
    public String reverseStr(String s, int k) {
        int len = s.length();
        char[] chars = s.toCharArray();
        int index = 0;

        while (index < len) {
            //判断剩余的字符是否够k=2个,不够k  全部翻转, k<len-index<2k 翻转前k
            if (len - index > k) {
                //局部反转,l指向左,r指向右
                for (int l = index, r = index + k - 1; l < r; l++, r--) {
                    char temp = chars[l];
                    chars[l] = chars[r];
                    chars[r] = temp;
                }
                index = index + 2 * k;
            } else {
                for (int l = index, r = len - 1; l < r; l++, r--) {
                    char temp = chars[l];
                    chars[l] = chars[r];
                    chars[r] = temp;
                }
                //置换结束,退出循环
                index = len;
            }
        }
        return new String(chars);
    }
}
发布了55 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq422243639/article/details/103747567