WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

Js算法题:统计一个字符串中出现次数最多的字符,并统计次数

更新时间:2021-02-08 15:29 作者:张培跃吧点击:
相信大家看到这个问题,有可能想到的是类似于以下的答案:
 
function getmaxObj(str) {
    if (str.length == 1) {
        return str;
    }
    var newObj = {};
    for (var i = 0; i < str.length; i++) {
        if (!newObj[str.charAt(i)])
            newObj[str.charAt(i)] = 1;
        else
            newObj[str.charAt(i)] += 1;
    }
    console.log(newObj )
    var maxObj ={
        maxkey :"",
        maxvalue:0
    }
    for (var k in newObj) {
        if (newObj[k] > maxObj.maxvalue) {
            maxObj.maxvalue = newObj[k];
            maxObj.maxkey = k;
        }
    }
    return maxObj;
}
var result =getmaxObj("zhangpeiyue.com");
// 出现最多的字符:e
console.log("出现最多的字符:"+result.maxkey);
// 出现次数:2
console.log("出现次数:"+result.maxvalue);
 
但是上面程序有一些小小的问题:如果最多的字符串有多个的话,只能统计出第一个字符串。例如我要统计字符串"zhang":
 
var result =getmaxObj("zhang");
// 出现最多的字符:z
console.log("出现最多的字符:"+result.maxkey);
// 出现次数:1
console.log("出现次数:"+result.maxvalue);
 
从结果可以看出,只统计出了字符串"z",而其它符合条件的字符串并没有统计出来,所以这样有些不科学。我们可以将代码优化下(不难理解,所以我就不注释啦):
 
function getmaxObj(str) {
    if (str.length == 1) {
        return str;
    }
    var newObj = {};
    for (var i = 0; i < str.length; i++) {
        if (!newObj[str.charAt(i)])
            newObj[str.charAt(i)] = 1;
        else
            newObj[str.charAt(i)] += 1;
    }
    console.log(newObj )
    var maxObj ={
        maxkey :[],
        maxvalue:0
    }
    for (var k in newObj) {
        if (newObj[k] > maxObj.maxvalue) {
            maxObj.maxvalue = newObj[k];
            maxObj.maxkey = [k];
        }else if(newObj[k] === maxObj.maxvalue)
            maxObj.maxkey.push(k);
    }
    return maxObj;
}
var result =getmaxObj("zhang");
// 出现最多的字符:z、h、a、n、g
console.log("出现最多的字符:"+result.maxkey.join("、"));
// 出现次数:1
console.log("出现次数:"+result.maxvalue);
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容