今天的題目是,找出在一串字母中重複最多的那個字母。 我會先自己解過一次,再參考答案,這篇文章會記錄我的解法,若是我覺得其他解法有值得注意的地方,也許也會記錄在這裡。
題目 — 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] = chars[char]+1 || 1 ; } console .log(chars) return chars; }
思路: 將字串轉成物件,鍵為該字串中不重複的字母,值為該字串中個字母重複的字數
例: abcdd
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 (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