美文网首页程序员WEB前端程序开发让前端飞
Js算法题:统计一个字符串中出现次数最多的字符,并统计次数

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

作者: 张培跃 | 来源:发表于2019-03-17 20:22 被阅读7次

    相信大家看到这个问题,有可能想到的是类似于以下的答案:

    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);
    

    欢迎各路大神吐槽!

    —————END—————
    [公众号回复“电子书”,送你经典前端电子书籍]
    喜欢本文的朋友们,欢迎关注微信公众号张培跃,收看更多精彩内容

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/eqydmqtx.html