2019前端面试题:计算字符串中出现次数最多的字符并输出
给大家分享一道同行今年10月份求职过程中遇到的一个面试题,计算字符串中出现次数最多的字符并输出,这道题看似很简单,但是细想了一下,感觉也有点麻烦,下面列出我的解题思路,代码亲测能实现题目要求,小伙伴们快来试试吧
(function( str ){
var arr = str.split(''); // 先把字符串切割成数组,因为要遍历这个数组
var newArr = []; // 定义一个新的数组用来存放[{'letter':'a','count':1},{'letter':'s','count':4}....] 这样的对象
for( var i=0;i<arr.length;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'))//在这里换一个新的字符串试试吧