LeetCode——541. 反转字符串 II(Java)

题目描述

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

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

示例 2:
输入:s = "abcd", k = 2
输出:"bacd"

题解思路

返回每k个字符反转之后的字符串,这里要注意是每k个反转一次,并且如果不够长则全部反转

首先反转必写的反转函数老生常谈了,双指针while一遍反转,这里难点是每次的左右指针

如果我们每k个反转一次,我们就必须每次增加2k个,只取k个反转,如果右指针大于length则给他字符串长度

正确代码

    public String reverseStr(String s, int k) {
        int length = s.length();
        char[] arr = s.toCharArray();

        for (int i = 0; i < length; i += 2 * k) {
            reverse(arr, i, Math.min(length, i + k) - 1);
        }

        return new String(arr);
    }

    private void reverse(char[] arr, int left, int right) {
        while (left < right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }

总结

作为反转plus版本我不知道有没有Ⅲ,不过只需要找到每次反转的范围和边界处理即可

如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见

LeetCode——541. 反转字符串 II(Java)

上一篇:(selenium+python)_UI自动化_模拟滚轮滑动页面


下一篇:Java协程编程之Loom项目尝鲜