下面讲一道面试前端开发做笔试常见的算法题:
判断一个字符串中出现次数最多的字符,统计这个字符出现的次数:如字符串"abcdefgaddda",d出现次数最多,次数为4.
刚开始的做题思路如下:
var str = 'abcdefgaddda'; var arr = str.split(''); //将字符串转为数组 var newArr = []; //声明一个数组保存去重后的字符 var numArr = []; //声明一个数组保存字符对应的个数 arr.forEach(function(element,index,array){ var index1 = newArr.indexOf(element); //获取当前元素在去重数组中的索引,如果存在则大于等于0,不存在则为-1 if(index1==-1){ newArr.push(element); //判断去重数组里没有当前元素,所以往数组里面追加 numArr.push(1); //同步更新个数组对应的字符个数,刚追加进去都为1 }else{ numArr[index1]++; //如果当前元素已存在,则更新个数数组对应的字符个数自增1 } }) console.log(arr,newArr,numArr); //["a", "b", "c", "d", "e", "f", "g", "a", "d", "d", "d", "a"] 原字符数组 //["a", "b", "c", "d", "e", "f", "g"] 去重后的字符的数组 //[3, 1, 1, 4, 1, 1, 1] 去重后的字符数组对应的个数数组 //得到去重后的字符数组及对应的字符个数后,找个数最大的数及对应的字符 function sortNumber(a,b){ return b-a; //规定排序规则 } var numArr1 = [].concat(numArr); //创建一个新数组并连接原数组,这样改变原数组才不会影响复制后的数组 numArr1.sort(sortNumber); //将每个字符的个数从大到小排序 var maxNum = numArr1[0]; //获取最大个数 var index = numArr.indexOf(maxNum); //最大个数对应原数组的位置 var maxStr = newArr[index]; //根据最大个数的位置找到出现次数最多的字符 console.log('字符串"'+str+'",'+maxStr+'出现次数最多,次数为'+maxNum);