力扣工作周刷题 - 541. 反转字符串 II

2020.10.18
原题:点击此处
拓展:反转字符串I

这道题其实更像在训练怎么把代码写的更简洁。。
题目有三个地方会反复利用:
1、判断是否应该反转;
2、反转字符串
3、是否已经离开边界

本题时间复杂度为O(N)
本体空间复杂度为O(1)

因此设计了两个函数,用来防止代码累赘:
1、反转字符串

    public void reverse(char[] target,int start,int end){
        //反转
        while(start < end){
            char temp = target[start];
            target[start] = target[end];
            target[end] = temp;
            start++;
            end--;
        }
    }

2、是否已经离开边界

    public int checkBorder(int start,int len,int k){
        if(start + k - 1 <= len){
            return start + k - 1;
        }else{
            return len;
        }
    }

核心代码:

    public String reverseStr(String s, int k) {
        int start = 0;
        int len = s.length()-1;
        int end =checkBorder(start,len,k);
        char[] chs = s.toCharArray();
        int batch = 1;
        while(start <=  len){
            //奇数次
            if(batch % 2 == 1){
             reverse(chs,start,end);
            }
            batch += 1;
            start = end + 1;
            //边界检测
            end =checkBorder(start,len,k);
        }
        return String.valueOf(chs);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值