前言
閒來無事,窮折騰。最近我朋友在找工作,遇到一些面試題,或者遇到一些問題會及時跟我討論。我則作為他的幕後軍師,為他出謀劃策。接下來我分享給大家一道簡單的面試題。
題目
統計字串中出現最多的字母與個數?
分析
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);//資料重組直觀看到資料分佈
}
複製程式碼
這是我給出的方案,也許還不是最優質的。望各位大佬指正。
總結
其實對於面試來說最重要的是考察面試者處理問題的邏輯思路,有些人能夠解決問題,有些人能夠以最優質的方案解決問題。前者是幹活的人,後者是幹好活的人。