字符串-反转字符串II

题目

https://leetcode-cn.com/problems/reverse-string-ii/
在这里插入图片描述
题目的意思其实概括为 每隔2k个反转前k个,尾数不够k个时候全部反转。而不要再去判断是不是2k。

思路

与反转字符串基本思路一致。有区别的就是要如何对有关k的各种情况的选择。

一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。

其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。然后再start=2k到我们未知的地方(要么是够k,要么是不够,也就是我们对end的设置)

所以当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。

这里便是把i当作start来定下区间的范围。

public String reverseStr(String s, int k) {
        char[] c = s.toCharArray();
        for(int i=0; i<c.length; i+=2*k){
            int start = i;
            //这里是判断尾数够不够k个来取决end指针的位置
            //前者是不够k个,后者是够
            int end = Math.min(c.length - 1, start + k - 1);
            reverse(c,start,end);
        }
        return new String(c);
    }
    void reverse(char[] cs, int l, int r) {
        while (l < r) {
            char c = cs[l];
            cs[l] = cs[r];
            cs[r] = c;
            l++; r--;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值