閒來無事,窮折騰。最近我朋友在找工做,遇到一些面試題,或者遇到一些問題會及時跟我討論。我則做爲他的幕後軍師,爲他出謀劃策。接下來我分享給你們一道簡單的面試題。面試
統計字符串中出現最多的字母與個數?數組
一、驗證數據是否字符串
二、字符串轉換爲數組
三、統計字符串出現的次數
複製代碼
例:sass
var str = 'aaaadddddssssgdhssssbbbbbuuuwmopqlsabcfwsqdghgukssuyutsudddddsasss';
複製代碼
寫一個函數專門處理這個事情。bash
/**
*
* 檢查字符串中出現次數最多的那個
*
*/
function maximum(s) {
//【第一步】驗證合法性
if (typeof s !== 'string') {
throw ('s is string');
}
//【第二步】轉換爲數組
var array = s.split("");
//【第三步】找出最多的字母
//這一步最關鍵
}
複製代碼
其實最重要的是第三步,看你站在什麼樣的思路去找對應的字母與其個數。大多數人會選擇使用兩個循環進行處理。函數
代碼以下:spa
/**
* 檢查字符串中出現次數最多的那個
*/
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"
);
複製代碼
結果如圖所示:code
若是面試官追問,如何肯定最多的字母的第一個位置與最後一個位置? 其實咱們在push的時候就能夠把這個數據的位置存起來,稍加改動便可求出。cdn
/**
* 檢查字符串中出現次數最多的那個
*/
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);//數據重組直觀看到數據分佈
}
複製代碼
其實對於面試來講最重要的是考察面試者處理問題的邏輯思路,有些人可以解決問題,有些人可以以最優質的方案解決問題。前者是幹活的人,後者是幹好活的人。blog