统计字符串中连续出现次数最多的字符的长度

在一个前端交流群里,看到群友面试,有这么一道题,就试着写了一下。当存在多个出现次数相同且都为最大长度的字符时,也将其统计出来,js代码如下:

		function findStr(string) {
            // itemMapLength 字符和其连续出现长度的映射
            // length 当前字符连续出现长度
            // prevLength 上一次连续出现次数最多的字符的长度
            let itemMapLength = {},
                length = 1,
                prevLength = 1;

            const map = (i) => {
	            // 如果当前长度大于等于上一次
                if (length >= prevLength) {
                    // 如果是大于,则清空itemMapLength;否则,保持itemMapLength不变
                    itemMapLength = length > prevLength ? {} : itemMapLength;

                    // 保存新的字符以及对应长度
                    itemMapLength[string.charAt(i)] = length;

                    // 记录新的字符连续出现最大长度
                    prevLength = length;
                }
            }

            for (let i = 0; i < string.length; i++) {
                // 比较当前字符和下一个字符是否相同,如果相同,则length加1;
                if (string.charAt(i) === string.charAt(i + 1)) {
                    length++;

                    // 此处用以判断防止最后出现的一直都是相同的字符,导致无法更新itemMapLength
                    if (i + 1 === string.length - 1) {
                        map(i);
                    }
                } else {
                    map(i);

                    // 重置下次连续出现字符长度为1
                    length = 1;
                }
            }

            // 将itemMapLength转换为key数组,用于拼接最终结果以及判断连续出现的最大长度字符是否只有一个
            const itemMapLengthKeysArr = Object.keys(itemMapLength);

            // 拼接结果
            let strResult = itemMapLengthKeysArr.reduce((reduceStr, item) => {
                return `${reduceStr}${item}: 次数为${itemMapLength[item]}, `
            }, '').slice(0, -2);

            return `${itemMapLengthKeysArr.length > 1 ? '连续出现的最多的字符不止一个,分别为:' : '连续出现的最多的字符有一个,为:'}${strResult}`;
        }

输出结果如下:
console.log(findStr('abcdef'))
在这里插入图片描述
console.log(findStr('aabbccddeeff'))
在这里插入图片描述
console.log(findStr('aabbcccddeeeff'))
在这里插入图片描述
console.log(findStr('aabbccdddeeddddff'))
在这里插入图片描述
console.log(findStr('aabbccddeeddddfffffffh'))
在这里插入图片描述
console.log(findStr('aabbccddeeddddffffffffff'))
在这里插入图片描述
console.log(findStr('aaaaaaaaaaabbccdddeeddddff'))
在这里插入图片描述

如果发现有什么不足之处或者不正确需要修改补充的地方,欢迎指正,共同进步~~~

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值