541. 反转字符串 II

该问题要求根据给定的步长k反转字符串s的部分字符。主要策略是遍历字符串,每次跳过2k个字符,然后反转接下来的k个字符,处理特殊情况如剩余字符不足k个或不足2k但大于等于k个。提供的Java代码实现中包含了详细的反转逻辑。
摘要由CSDN通过智能技术生成

https://leetcode.cn/problems/reverse-string-ii/

题目要求

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

方法

class Solution {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        int n = chars.length;
        for (int i = 0; i < n; i += 2 * k) {
            // 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
            if (i + k <= chars.length) {
                reverse(chars, i, i + k - 1);
                continue;
            }
            // 剩余字符少于 k 个,则将剩余字符全部反转
            reverse(chars, i, chars.length - 1);
        }
        return new String(chars);
    }

    public void reverse(char[] s, int l, int r) {
        for (; l < r; l++, r--) {
            char temp = s[l];
            s[l] = s[r];
            s[r] = temp;
        }
    }
}

思路

  • 在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。(这样的逻辑会很清晰)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值