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

359 阅读1分钟

思路

  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