From 2b28aeeac54cd01e06447b077faa35cfba7cc890 Mon Sep 17 00:00:00 2001 From: aiueoriku <112373068+aiueoriku@users.noreply.github.com> Date: Wed, 21 May 2025 10:50:55 +0900 Subject: [PATCH 1/3] Create GroupAnagrams.md Problem: https://leetcode.com/problems/group-anagrams/description/ --- GroupAnagrams/GroupAnagrams.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 GroupAnagrams/GroupAnagrams.md diff --git a/GroupAnagrams/GroupAnagrams.md b/GroupAnagrams/GroupAnagrams.md new file mode 100644 index 0000000..c72cde8 --- /dev/null +++ b/GroupAnagrams/GroupAnagrams.md @@ -0,0 +1,33 @@ +# Step1 +何も見ずに解く +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + anagrams = [] + str_dict = {} + for str in strs: + str_dict[str] = sorted(str) + print(str_dict) +``` +出力 +``` +{'eat': ['a', 'e', 't'], 'tea': ['a', 'e', 't'], 'tan': ['a', 'n', 't'], 'ate': ['a', 'e', 't'], 'nat': ['a', 'n', 't'], 'bat': ['a', 'b', 't']} +``` +辞書のバリューから逆引きしたかったが,文法がわからず断念. +ChatGPTに聞いた結果,str_dict.items()でキーとバリューが取得できる. +listはハッシュに使えないので,予め文字列に変換したほうが良さそう. +また,defaultdictという方法が有効だと感じたのでそれを使うことにする. + + +# Step2 +調べた結果を受けてときなおし +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + anagrams = defaultdict(list) + for str in strs: + str_sorted = ''.join(sorted(str)) + anagrams[str_sorted].append(str) + return list(anagrams.values()) +``` +defaultdictという文法を使うことで簡潔にかけたが,初期の方針でも書けるようにしたほうが良い気がする. From 310032dfdbfb2659d9b6e029c1162a67fab77816 Mon Sep 17 00:00:00 2001 From: aiueoriku <112373068+aiueoriku@users.noreply.github.com> Date: Wed, 21 May 2025 11:13:29 +0900 Subject: [PATCH 2/3] withought defaultstatedict --- GroupAnagrams/GroupAnagrams.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/GroupAnagrams/GroupAnagrams.md b/GroupAnagrams/GroupAnagrams.md index c72cde8..ca5e3bd 100644 --- a/GroupAnagrams/GroupAnagrams.md +++ b/GroupAnagrams/GroupAnagrams.md @@ -31,3 +31,25 @@ class Solution: return list(anagrams.values()) ``` defaultdictという文法を使うことで簡潔にかけたが,初期の方針でも書けるようにしたほうが良い気がする. + +# Step3 +初期の方針,つまりdefauldictを用いらずに解く +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + anagrams = {} + + for str in strs: + str_sorted = "".join(sorted(str)) + anagrams[str] = str_sorted + + anagram_groups = {} + for str, str_sorted in anagrams.items(): + if str_sorted not in anagram_groups: + anagram_groups[str_sorted] = [] + anagram_groups[str_sorted].append(str) + + return [x for x in anagram_groups.values()] +``` +strs = ["",""]に対して,出力がstrs = +[""]となりエラー. From 65378124133f8c92b76e7d4e84fb3a1495b02591 Mon Sep 17 00:00:00 2001 From: aiueoriku <112373068+aiueoriku@users.noreply.github.com> Date: Thu, 22 May 2025 09:48:33 +0900 Subject: [PATCH 3/3] add Step4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コメントを元に修正 --- GroupAnagrams/GroupAnagrams.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/GroupAnagrams/GroupAnagrams.md b/GroupAnagrams/GroupAnagrams.md index ca5e3bd..70bad13 100644 --- a/GroupAnagrams/GroupAnagrams.md +++ b/GroupAnagrams/GroupAnagrams.md @@ -53,3 +53,18 @@ class Solution: ``` strs = ["",""]に対して,出力がstrs = [""]となりエラー. + +# Step4 +コメントを元に解き直し +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + str_to_sorted = {} + for s in strs: + s_sorted = "".join(sorted(s)) + if s_sorted not in str_to_sorted: + str_to_sorted[s_sorted] = [] + str_to_sorted[s_sorted].append(s) + return [word for word in str_to_sorted.values()] +``` +Step3でおきたエラーも消えた.