(leetcode)541. 反转字符串 II 2021/6/10

541. 反转字符串 II javascript

题目
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例

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

代码1

  • 循环 切割 反转
var reverseStr = function(s, k) {
    if(k==1)return s
    var result = ''
    for(var i=0;i<s.length;i+=(2*k)){
        var st = s.substr(i,i+2*k)
        // 如果少于k,则全部反转
        if(st.length<k)st = st.split('').reverse().join('')
        // 如果少于 2k 但 大于等于 k,则反转前k个字符
        else if(st.length >=k && st.length <= 2*k){
            st = st.substr(0,k).split('').reverse().join('') + st.substr(k,st.length-1)
        }
        result += st
    }
    return result
};

在这里插入图片描述
emm… 就错了,于是有了代码2

代码2

'abcdefg'

i=0           i=2            i=4                 i=6
t='ab'        t='cd'         t='ef'              t='g'
n=1           n=2            n=3                 n=4
t='ba'        t='cd'         t='fe'              t='g'
result='ba'   result='bacd'  result='bacdfe'     result='bacdfeg'

result = 'bacdfeg'
var reverseStr = function(s, k) {
    let n = 0, result = '';
    for (let i = 0; i < s.length; i+=k) {
        let st = s.slice(i, i+k);
        n++;
        if (n%2 === 1) {
            st = st.split('').reverse().join('');
        }
        result = result + st;
    }
    return result;
};

在这里插入图片描述

学艺不精,还需努力💪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值