三种方法实现算出字符串中出现多字符

135 阅读1分钟
//第一种一般方法
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
function getMore(str){
//把字符串的每一项当做属性名存起来
//存储之前 先看 对象中有没有这个属性,没有就给obj增加一个属性 属性值是1
//没有的话 就在 他现在的  值基础上 加1
    let obj = {};
    for(let i =0;i<str.length;i++){
        let t = str[i];
        if(obj.hasOwnProprperty(t){
            obj[t] += 1;
        } else{
            obj[t] = 1;
        }
    }
    let key = '',num = 0;
    for(var k in obj){
        if(obj[k] >num){
            key = k;
            num = obj[k]
        }
    }
    return{
        key,
        num
    }
}
console.log(getMore(str))
//{key: "d", num: 9} //{n: "d", m: 9}
//第二种 match捕获
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
function getMore2(str){
//先获取乡转为数组的字符串aadddddddddeffffffgggghrssssss
    str = str.split('').sort().join('');
    let reg = /(\w)\1*/g
    var arr = str.match(reg);
    //获取相同字符组成的数组
    arr.sort((a,b) =>{
        return b.length - a.length
        //降序  第一项就是想要的
    })
    return{
        key:arr[0][0],
        num:arr[0].length
    }
}
console.log(getMore2(str))//{key: "d", num: 9}

//第三种方法replace实现
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
        function getMore3(str) {
            str = str.split('').sort().join('');//
            let reg = /(\w)\1*/g;
         let key = '',num = 0;
         str.replace(reg,function(a,b){
         //a是大正则dddddddddd
         //b是第一个分组里的内容d
             if(a.length >num){
                 num = a.length;
                 key = b;
             }
         })
         return{
             key,
             num  
         }
        }
        console.log(getMore3(str))//{key: "d", num: 9}