森田賢二のleetCodeの使い方、解説、解答を毎日更新しているキャラクター

[leetcode]問題解答と解説。49. Group Anagrams [JavaScript]

[leetcode]問題解答と解説。49. Group Anagrams [JavaScript]

皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます

私はある決意をして今挑んでいます。
モチベーションを保つためだけにこれをやっています。

では今日のleetCode。
【49. Group Anagrams】の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。

※下にある自分のコードは自分で設けた制限時間内に書けたところまです。

これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。

森田賢二のleetCode
森田賢二のleetCode

49. Group Anagrams ルール

exampleは実際の問題ページを見てください

49. Group Anagrams 問題ページ

49. Group Anagrams

[leetcode] 49. Group Anagrams

my code is good(correct answer)

   let map = new Map()
    for (let i = 0; i < strs.length; i++){
        const tmp = strs[i];
        const sorted = tmp.split("").sort().join("")
        if(map.has(sorted)){
            map.get(sorted).push(tmp)
            continue;
        }
        map.set(sorted, [strs[i]])
    }
    // Array.from(map.values())でもいいが、それだとしたのより遅かった。実務ではvaluesにしたい
    return Array.from(map).map((e,i) => e[1])

久しぶりにできた。最初のコードはひどいものだった
そしてsortしなくてはいけないのと最後mapするのはおそらく違う
が、

[leetcode] 49. Group Anagrams。discussの中の一つの解答例

数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね

JavaScriptでfilterされている、discussはこちらから

49. Group Anagrams
で伝えている3番目のを考察したい

var groupAnagrams = function(strs) {
    let res = {};
    for (let str of strs) {
        let count = new Array(26).fill(0);
        for (let char of str) count[char.charCodeAt()-97]++;
        let key = count.join("#");
        // "1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#
        // この段階でアルファベットの位置を示したkeyを作っている。
        res[key] ? res[key].push(str) : res[key] = [str];
    }
    return Object.values(res);
};
// Time Complexity: O(n*k) where n is the size of input array and k is the maximum length of string in input array
// Space Complexity: O(n)

[leetcode] 49. Group Anagramsをやってみて感想

  • charCodeAt...
  • keyの作り方勉強になった。なるほど。split("").sort().join("")は抵抗あったので

カテゴリー leetCode