2019前端面试题:计算字符串中出现次数最多的字符并输出

给大家分享一道同行今年10月份求职过程中遇到的一个面试题,计算字符串中出现次数最多的字符并输出,这道题看似很简单,但是细想了一下,感觉也有点麻烦,下面列出我的解题思路,代码亲测能实现题目要求,小伙伴们快来试试吧

(function( str ){

        var arr = str.split('');  // 先把字符串切割成数组,因为要遍历这个数组

        var newArr = [];  // 定义一个新的数组用来存放[{'letter':'a','count':1},{'letter':'s','count':4}....] 这样的对象

        for( var i=0;i

            var isExist = false;  // 定义一个标记,判断循环的当前字母在不在newArr数组的对应的对象里

// 如果存在了就把对应的count次数+1,isExsit赋值为true,标记为已存在

            for( var j =0; j < newArr.length;j++ ){    

                if( arr[i] == newArr[j]['letter']){

                    newArr[j]['count'] += 1;

                    isExsit = true;

                }

            }

 // 如果newArr里不存在对应的对象,就new一个新的对象push进去

            if(!isExist){

                var obj = {'letter':arr[i],'count':1}; 

                newArr.push(obj);

            }

        }

console.log(newArr)//这里可以把我们生成的新数组打印出来看一下

        // 到这里,newArr就形成了想要的样子[{‘letter’:'a','count':1},{‘letter’:'s','count':4}....]

        // 现在就是要找出‘count’的最大值,再找到对应的字母‘letter’

        // 先假设新数组中count最大值的项是数组里的第一项,该出现次数最多的字母是新数组中第一项对应的letter

        var max = newArr[0]['count'],maxLetter=newArr[0]['letter'];

        // 再对newArr进行循环,与第一项进行比较,如果count比第一项的count大,需对max重新赋值

        for(var k = 0; k < newArr.length; k++ ){

            if( newArr[k]['count'] > max ){

                max = newArr[k]['count'];

                maxLetter = newArr[k]['letter'];

            }

        }

        console.log(max,maxLetter)  // 在控制台打印的是 6 ‘a’

    }('aaaaaabcdderrt'))//在这里换一个新的字符串试试吧

你可能感兴趣的:(2019前端面试题:计算字符串中出现次数最多的字符并输出)