3日目の復習やっていきます。
49. Group Anagrams
タイトルのまんまアナグラムになっている要素をグルーピングする問題
ひとまず自分のコード
function groupAnagrams(strs: string[]): string[][] { let answer: string[][] = new Array(); let mapAnagram = new Map<string, number>(); let count: number = 0; for (let i = 0; i < strs.length; i++) { const str: string = strs[i]; const sorted: string = sortStr(str); let key = count; if (mapAnagram.has(sorted)) { key = mapAnagram.get(sorted); answer[key].push(str); continue; } answer[key] = new Array(); answer[key].push(str); mapAnagram.set(sorted, key); count++; } return answer; }; function sortStr(str: string): string { return [...str].sort().toString(); }
実行速度的には問題なし。ただ、処理が複雑になってしまった。
分かり易いコード
function groupAnagrams(strs: string[]): string[][] { const hash: Map<string, string[]> = new Map(); for (const string of strs) { const sorted = string.split("").sort().join(); if (hash.has(sorted)) { hash.get(sorted)!.push(string); } else { hash.set(sorted, [string]); } } return [...hash.values()]; }
無駄な宣言がなく、純粋に処理を読みやすい。 あと、Mapの値に答えで利用できる配列を格納しているので直感的にコードを理解できる。
フムフム直感的に理解できるコードか~
プログラミングの原則覚えないと。
実務で開発できてない分、家でプログラミングするのが楽しい!