两种方法获取一个字符串中出现次数最多的字符

第一种方法

let str = 'sdfgsgsdgfsgfsfgsgfssfgsrger34tyj';
    // 使用一个对象去存储  各个不同的字符,把字符当作了对象的属性名, 属性值用来存储该字符出现的次数
    function fn(str) {
        let obj = {}
        for (let i = 0; i < str.length; i++) {
            let key = str[i];
            if (obj[key]) {
                //  已经添加过的属性 属性值要累加1
                obj[key]++
            } else {
                // 若对象中没有这个属性的时候 证明这个字符第一次出现,
                // 就把他当作对象一个属性,这个字符第一次出现,所以属性值对应的是1
                obj[key] = 1
            }
        }
        console.log(obj);
        //  从obj中找出出现次数最多的字符
        // 假设 出现最多的次数1次 字符串是空
        let char = '',
            max = 1;
        for (let k in obj) {
            if (obj[k] > max) {
                //  对象中 有个字符出现的次数比max大 , 
                // 重新修改max,让max是当前这个字符出现的次数,char变成当前这个字符
                max = obj[k]
                char = k;
            }
        }
    }
    fn(str)

第二种方法

let str = 'sdfgsgsdgfsgfsfgsgfssfgsrger34tyj';

    function fn2(str) {
        //先把字符串排序,好处就是会把一样的字符串排在一起
        str = str.split('').sort((a, b) => a.localeCompare(b)).join('')
            // console.log(str)
            // /(\w)\1*/g 是为了匹配那种连续字符
        let reg = /(\w)\1*/g; // \1 反向引用  代表第一个小分组匹配的内容
        let char = '',
            max = 0;
        str.replace(reg, function(a, b) {
            // console.log(a, b)
            if (a.length > max) {
                max = a.length;
                char = b;
            }
        })
        console.log(char, max)
    }
    fn2(str)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值