给定数组['1a','2b','13c','5a'],数组元素的格式是一个数字(可能多位)前缀与一个字母的组合,输出出现次数最多的字母对应的前缀数字之和。
思路:使用hash。
实现:
function fun(arr){ let map = new Map(); for(let i=0;i<arr.length;i++){ let n1 = arr[i].slice(0,arr[i].length-1)-'0'; let n2 = arr[i][arr[i].length-1]; if(!map.has(n2)){ //该字母第一次出现 map.set(n2,[1,n1]); }else{ //该字母之前已出现。更新其出现的次数、累加和 let old = map.get(n2); map.set(n2,[old[0]+1,old[1]+n1]); } } let res = 0; //出现的最多次数所对应的累加和 let max = 0; //出现的最多次数 for(let key of map.keys()){//寻找出现次数最多的字母 const item = map.get(key); if( item[0]>max){ max = item[0]; res = item[1]; } } return res; } let arr = ['1a','2b','13c','5a']; console.log(fun(arr)); //6