medium LC #49 ↗

PROBLEM 02

文字を並べ替えて同じになる語をまとめる

文字の構成が同じ語をグループ化します。

目安 30分 hash-map · canonical-key · sorting

検索候補の単語を、文字の並べ替えだけで互いに変換できるグループへ整理します。 グループ同士の順番と、グループ内の語順は問いません。

groupAnagrams(words) はグループの配列を返してください。 英小文字だけを扱います。

入力: ["tea", "arc", "eat", "car", "bat", "ate"]
出力: [["tea", "eat", "ate"], ["arc", "car"], ["bat"]]
入力: ["", "b", ""]
出力: [["", ""], ["b"]]

制約

  • 1 <= words.length <= 10,000
  • 各語の長さは 0 以上 100 以下
  • 各語は英小文字のみ

対応する問題: LeetCode #49 Group Anagrams

STEPWISE HINTS

ヒント

01考え方の方向

並び順ではなく、語を構成する文字の集合を表す共通の印を作れないか考えます。

02使うデータ構造

各語の文字をソートした文字列を Map のキーにすると、同じ構成の語が同じ場所に集まります。

03擬似コード

Map<string, string[]> を作る。各 word の文字をソートして key とし、対応する配列へ word を追加する。最後に Map の values を返す。

AFTER ACCEPTED

解説

AC 後に解説が開きます

まずは自分の言葉で方針を説明し、コードに落としてみましょう。