【閒談】如何統計字串中出現最多的字母與個數
阿新 • • 發佈:2018-12-14
前言
閒來無事,窮折騰。最近我朋友在找工作,遇到一些面試題,或者遇到一些問題會及時跟我討論。我則作為他的幕後軍師,為他出謀劃策。接下來我分享給大家一道簡單的面試題。
題目
統計字串中出現最多的字母與個數?
分析
1、驗證資料是否字串
2、字串轉換為陣列
3、統計字串出現的次數
例:
var str = 'aaaadddddssssgdhssssbbbbbuuuwmopqlsabcfwsqdghgukssuyutsudddddsasss';
寫一個函式專門處理這個事情。
/** * * 檢查字串中出現次數最多的那個 * */ function maximum(s) { //【第一步】驗證合法性 if (typeof s !== 'string') { throw ('s is string'); } //【第二步】轉換為陣列 var array = s.split(""); //【第三步】找出最多的字母 //這一步最關鍵 }
其實最重要的是第三步,看你站在什麼樣的思路去找對應的字母與其個數。大多數人會選擇使用兩個迴圈進行處理。
程式碼如下:
/** * 檢查字串中出現次數最多的那個 */ function maximum(s) { if (typeof s !== "string") { throw "s is string"; } var array = s.split(""), l = array.length, obj = {}, ismaxObj = { max: 0, val: "" }, arrayVal = ""; while (l--) { arrayVal = array[l]; if (!obj[arrayVal]) { obj[arrayVal] = []; } obj[arrayVal].push(arrayVal); if (ismaxObj.max != 0) { if (obj[arrayVal].length > ismaxObj.max) { ismaxObj.max = obj[arrayVal].length; ismaxObj.val = array[l]; } } else { ismaxObj.max = obj[arrayVal].length; ismaxObj.val = arrayVal; } } //console.log(array); console.log(ismaxObj);//出現次數最多的字母與次數 console.log(obj);//資料重組直觀看到資料分佈 } maximum( "aaaadddddsgdhssssbbbbbuuupqlsabcfwsqdghgukssuyutsudddddsasss,ewfd,null,undefind.?Qzadsdvsf\/\\\\[;ll;,lw" );
結果如圖所示:
追問
如果面試官追問,如何確定最多的字母的第一個位置與最後一個位置?
其實我們在push的時候就可以把這個資料的位置存起來,稍加改動即可求出。
/** * 檢查字串中出現次數最多的那個 */ function maximum(s) { if (typeof s !== "string") { throw "s is string"; } var array = s.split(""), ll = array.length, obj = {}, ismaxObj = { max: 0, val: "" }, arrayVal = ""; for (var l=0;l<ll;l++) { arrayVal = array[l]; if (!obj[arrayVal]) { obj[arrayVal] = []; } obj[arrayVal].push(arrayVal+'-'+l); if (ismaxObj.max != 0) { if (obj[arrayVal].length > ismaxObj.max) { ismaxObj.max = obj[arrayVal].length; ismaxObj.val = array[l]; } } else { ismaxObj.max = obj[arrayVal].length; ismaxObj.val = arrayVal; } } console.log(obj[ismaxObj.val][0],obj[ismaxObj.val][obj[ismaxObj.val].length-1]);//最多的字母的第一個位置與最後一個位置 console.log(ismaxObj);//出現次數最多的字母與次數 console.log(obj);//資料重組直觀看到資料分佈 }
這是我給出的方案,也許還不是最優質的。望各位大佬指正。
總結
其實對於面試來說最重要的是考察面試者處理問題的邏輯思路,有些人能夠解決問題,有些人能夠以最優質的方案解決問題。前者是幹活的人,後者是幹好活的人。