JavaScript - 编写一个函数返回字符串中最长的连续重复字母

思路

  1. 可以将每个重复字母开头的字符串中的第一个保存到一个变量中 (代码中的a), 然后将后面的数组元素与它对比:
  • 如果相同, 则计数器累加. 计数器代表的是这串重复字符串的长度
  • 如果不同, 说明后面是一个新的字母了, 这时需要更新变量 a的值, 并且记录下此时字符串数组的下标 (用来截取结束的重复字符串), 最后根据重复字符串的长度判断是否更新maxStr的值.
  1. 字符串中可能会出现两串重复字母长度相等的情况, 为了避免出现这个问题, 我们可以提前声明一个备用的字符串 (代码中的 maxStrl) 进行存储. 最后根据备用字符串的长度是否为0来判断有没有出现上述情况:
  • 如果出现了, 需要同时输出maxStrmaxStrl的内容
  • 如果没出现, 只需要输出maxStr就可以

或者可以使用直接一起输出两部分的内容, maxStrl内容为空也没什么影响.

    <script>
        maxr("mmmiijjjjkkkkkkssptr");

        function maxr(char){
            var arr = char.split("");
            var maxCount=0;
            var maxStr = "";
            var maxStrl = ""; //如果有两个同样长的字符串, 作为备用, 存放另一个
            var a; //a用来表示当前的字母
            a = arr[0]; //初始化
            //截取字符串
            var end;

            for(var i=0;i<arr.length;i++){
                if(arr[i] == a){

                    maxCount += 1;
                }
                else {
                    end = i;
                    // console.log(maxCount);
                    var maxStr1 = char.slice(end-maxCount,end);
                    // console.log(maxStr);

                    //判断是否是最大的
                    if(maxStr1.length > maxStr.length){
                        maxStr = maxStr1;
                    }
                    //如果有两个等长的部分
                    else if (maxStr1.length == maxStr.length){
                        maxStrl = maxStr1;
                    }

                    a = arr[i];
                    maxCount = 1;
                }
            }

            //判断结果输出
            if(maxStrl.length == 0){
                        console.log(maxStr);
                    }
                    else{
                        console.log(maxStr);
                        console.log(maxStrl);
                    }
        }
    </script>

输出:

kkkkkk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Charonmomo

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值