給大家分享一道同行今年10月份求職過(guò)程中遇到的一個(gè)面試題,計(jì)算字符串中出現(xiàn)次數(shù)最多的字符并輸出柠横,這道題看似很簡(jiǎn)單推姻,但是細(xì)想了一下平匈,感覺(jué)也有點(diǎn)麻煩,下面列出我的解題思路藏古,代碼親測(cè)能實(shí)現(xiàn)題目要求增炭,小伙伴們快來(lái)試試吧
(function( str ){
? ? ? ? var arr = str.split('');? // 先把字符串切割成數(shù)組,因?yàn)橐闅v這個(gè)數(shù)組
? ? ? ? var newArr = [];? // 定義一個(gè)新的數(shù)組用來(lái)存放[{'letter':'a','count':1},{'letter':'s','count':4}....] 這樣的對(duì)象
? ? ? ? for( var i=0;i<arr.length;i++ ){
? ? ? ? ? ? var isExist = false;? // 定義一個(gè)標(biāo)記拧晕,判斷循環(huán)的當(dāng)前字母在不在newArr數(shù)組的對(duì)應(yīng)的對(duì)象里
// 如果存在了就把對(duì)應(yīng)的count次數(shù)+1隙姿,isExsit賦值為true,標(biāo)記為已存在
? ? ? ? ? ? for( var j =0; j < newArr.length;j++ ){? ??
? ? ? ? ? ? ? ? if( arr[i] == newArr[j]['letter']){
? ? ? ? ? ? ? ? ? ? newArr[j]['count'] += 1;
? ? ? ? ? ? ? ? ? ? isExsit = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
?// 如果newArr里不存在對(duì)應(yīng)的對(duì)象厂捞,就new一個(gè)新的對(duì)象push進(jìn)去
? ? ? ? ? ? if(!isExist){
? ? ? ? ? ? ? ? var obj = {'letter':arr[i],'count':1};?
? ? ? ? ? ? ? ? newArr.push(obj);
? ? ? ? ? ? }
? ? ? ? }
console.log(newArr)//這里可以把我們生成的新數(shù)組打印出來(lái)看一下
? ? ? ? // 到這里输玷,newArr就形成了想要的樣子[{‘letter’:'a','count':1},{‘letter’:'s','count':4}....]
? ? ? ? // 現(xiàn)在就是要找出‘count’的最大值队丝,再找到對(duì)應(yīng)的字母‘letter’
? ? ? ? // 先假設(shè)新數(shù)組中count最大值的項(xiàng)是數(shù)組里的第一項(xiàng),該出現(xiàn)次數(shù)最多的字母是新數(shù)組中第一項(xiàng)對(duì)應(yīng)的letter
? ? ? ? var max = newArr[0]['count'],maxLetter=newArr[0]['letter'];
? ? ? ? // 再對(duì)newArr進(jìn)行循環(huán)欲鹏,與第一項(xiàng)進(jìn)行比較机久,如果count比第一項(xiàng)的count大,需對(duì)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)? // 在控制臺(tái)打印的是 6 ‘a(chǎn)’
? ? }('aaaaaabcdderrt'))//在這里換一個(gè)新的字符串試試吧