小练习6:统计出现最多的字母和次数

244 阅读1分钟
  • 本次练习写一个统计字符串中出现最多的字母以及出现的次数,主要通过两个方法来实现(正则和普通方法)
  • 普通方法如下:
    • 利用对象不重名的特征,把每个字母存入对象中,属性名是字母,属性值是字母出现的次数,在利用假设法求出字母和次数
    var str1 = "asffsadgasgerhrthwh";
    var obj1 = {};
    for(var i = 0; i < str1.length; i++){//将字母存入对象中
        var cur = str1[i];
        if(obj1[cur]){
            obj1[cur]++;
        }else {
            obj1[cur] = 1;
        }
    }
    //利用假设法求出出现最多的字母及次数
    var max1 = 1; //假设出现最多的次数
    var maxStr1 = null;//假设出现最多次数的字母
    for(var key in obj1){
        if(obj1[key] > max1){
            max1 = obj1[key];
            maxStr1 = key;
        }else if(obj1[key] == max1){
            maxStr1 += ','+key;
        }
    }
    console.log(max1, maxStr1);
  • 正则匹配方法如下:
    var str2 = "asasdgargwehhwhhw";
    var ary2 = str2.split('');
    var ary2 = [].slice.call(str2); //转换数组
    ary2.sort(function (a,b) { //转换数组方法2
        return a.localeCompare(b);
    });
    str2 = ary2.join('');
    //匹配字符串中连续出现的相同字母
    var reg2 = /(\w)\1*/g;
    //利用假设法
    var maxstr2 = null;
    var max2 = 1;
    str2.replace(reg2,function ($0,$1) {
        if($0.length > max2){
            max2 = $0.length;
            maxstr2 = $1;
        }else if($0.length === max2){
            maxstr2 += ','+$1;
        }
    });
    console.log(max2, maxstr2);