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 後に解説が開きます

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