Day 4 - 出現最多的字母

Day 4 - 出現最多的字母

今天的題目是,找出在一串字母中重複最多的那個字母。
我會先自己解過一次,再參考答案,這篇文章會記錄我的解法,若是我覺得其他解法有值得注意的地方,也許也會記錄在這裡。

題目

— Directions
Given a string, return the character that is most
commonly used in the string.
— Examples
maxChar(“abcccccccd”) === “c”
maxChar(“apple 1231111”) === “1”

找出字串中重複最多次的字

我的解法

無解。慘。
想來想去不知道怎麼辦,只好參考解答。

其他解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//寫法一
function getMaxChar(str){
let chars = {};
for(let char of str){
if(!chars[char]){
chars[char] = 1
}else{
chars[char] ++;
}
}
console.log(chars);
}

//簡化
function getMaxChar(str){
let chars = {};
for(let char of str){
//若是目前chars中還沒有char值,該值會是undefined,undefined不算數字是不能作運算的, 若如此,賦值為1
chars[char] = chars[char]+1 || 1;
}
console.log(chars)
return chars;
}

思路:
將字串轉成物件,鍵為該字串中不重複的字母,值為該字串中個字母重複的字數

例: abcdd

a b c d
1 1 1 2
1
2
3
4
5
6
obj = {
a: 1,
b: 1,
c: 1,
d: 2
}

宣告一個物件為chars,它會記錄所有字母和其重複的次數,接著遍歷傳入字串中的每個字,若是chars物件中已經有鍵為目前遍歷到的字母,則該鍵值+1,隨著字串每個值被遍歷到,鍵值也會不斷累加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function getMaxChar(str){
let chars = {};
let max = 0;
let maxChar = '';
for(let char of str){
chars[char] = chars[char]+1 || 1;
}
//for in遍歷物件中屬性
for(let key in chars){
if(chars[key] >max){
max = chars[key];
maxChar = key;
}
}
console.log(maxChar, max);
return chars;
}
參考

The Coding Interview Bootcamp: Algorithms + Data Structures

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×