力扣 541. 反转字符串 II

本文解析了LeetCode题目Reverse String II,介绍了如何使用滑动窗口模拟的方法,通过一个大小为2k的窗口对字符串进行操作,确保每次翻转前k个字符,并处理特殊情况。代码展示了如何将前k个字符反转,适用于字符串处理和算法面试题目的解决。

题目来源:https://leetcode-cn.com/problems/reverse-string-ii/

大致题意:
给定一个字符串,和一个整数k。从字符串开头开始,每2k个字符,就将前k个字符翻转。

  • 若剩余字符小于k个,将其全部翻转
  • 若剩余字符小于2k个,将前k个翻转

给出翻转后的字符串

思路

滑动窗口模拟

使用一个大小为2k的滑动窗口对字符串进行遍历,每次将前k个字符串翻转。为了防止最后一段窗口内的字符串长度小于k,可使用

  • min(i+k, n)来表示翻转的右边界,其中 n 为字符串长度,i 为每次窗口的左边界

代码:

public String reverseStr(String s, int k) {
        char[] str = s.toCharArray();
        int n = s.length();
        for (int i = 0; i < n; i += 2*k) {
        	// 将前k个字符翻转,使用min来处理最后一段
            reverse(str, i, Math.min(n, i+k)-1);
        }
        return new String(str);
    }
    public void reverse(char[] str, int begin, int end) {
        while (begin < end) {
            char c = str[begin];
            str[begin] = str[end];
            str[end] = c;
            begin++;
            end--;
        }
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三更鬼

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值