下面講一道面試前端開發做筆試常見的算法題:
判斷一個字符串中出現次數最多的字符,統計這個字符出現的次數:如字符串"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);
