From f6be8e3126f562282f51cba4aee4d4759ae01e74 Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Thu, 21 May 2026 23:21:08 +0900 Subject: [PATCH 1/2] Solve group anagrams --- 49_group_anagrams/problem.md | 1 + 49_group_anagrams/step1.md | 22 ++++++++++++++++++++++ 49_group_anagrams/step2.md | 20 ++++++++++++++++++++ 49_group_anagrams/step3.md | 20 ++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 49_group_anagrams/problem.md create mode 100644 49_group_anagrams/step1.md create mode 100644 49_group_anagrams/step2.md create mode 100644 49_group_anagrams/step3.md diff --git a/49_group_anagrams/problem.md b/49_group_anagrams/problem.md new file mode 100644 index 0000000..e7dac33 --- /dev/null +++ b/49_group_anagrams/problem.md @@ -0,0 +1 @@ +## 問題: [560. Group Anagrams](https://leetcode.com/problems/group-anagrams/description/) diff --git a/49_group_anagrams/step1.md b/49_group_anagrams/step1.md new file mode 100644 index 0000000..4cacaf9 --- /dev/null +++ b/49_group_anagrams/step1.md @@ -0,0 +1,22 @@ +# Step 1 + +- string毎に、アルファベットが何回出たかをa-zの配列に記録する +- dictに配列をキーとする、stringを追加していく + +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + unordered_characters_to_words = defaultdict(list) + for word in strs: + key = [0] * 26 + for character in word: + key[ord(character) - ord("a")] += 1 + unordered_characters_to_words[tuple(key)].append(word) + return list(unordered_characters_to_words.values()) +``` + +時間計算量: $O(mn)$ + +空間計算量: $O(mn)$ + +アルゴリズム最大実行時間(概算): 時間計算量 / Pythonの1秒あたりの計算ステップ数 -> $(10^4 \times 100) \div 10,000,000 = 0.1 (s)$ diff --git a/49_group_anagrams/step2.md b/49_group_anagrams/step2.md new file mode 100644 index 0000000..d3bab23 --- /dev/null +++ b/49_group_anagrams/step2.md @@ -0,0 +1,20 @@ +# Step 2 + +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + signature_to_words = defaultdict(list) + for word in strs: + key = [0] * 26 + for character in word: + key[ord(character) - ord("a")] += 1 + signature_to_words[tuple(key)].append(word) + return list(signature_to_words.values()) + +``` + +時間計算量: $O(mn)$ + +空間計算量: $O(mn)$ + +アルゴリズム最大実行時間(概算): 時間計算量 / Pythonの1秒あたりの計算ステップ数 -> $(10^4 \times 100) \div 10,000,000 = 0.1 (s)$ diff --git a/49_group_anagrams/step3.md b/49_group_anagrams/step3.md new file mode 100644 index 0000000..d7087d2 --- /dev/null +++ b/49_group_anagrams/step3.md @@ -0,0 +1,20 @@ +# Step 3 + +```python +class Solution: + def groupAnagrams(self, strs: List[str]) -> List[List[str]]: + signature_to_words = defaultdict(list) + for word in strs: + key = [0] * 26 + for character in word: + key[ord(character) - ord("a")] += 1 + signature_to_words[tuple(key)].append(word) + return list(signature_to_words.values()) + +``` + +1回目: 1分 47秒 + +2回目: 1分 28秒 + +3回目: 1分 29秒 From aca67df42c582838b5fbc1b2b9a9ecfa4cf40875 Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Thu, 21 May 2026 23:26:44 +0900 Subject: [PATCH 2/2] Correct the problem number --- 49_group_anagrams/problem.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/49_group_anagrams/problem.md b/49_group_anagrams/problem.md index e7dac33..60fecbf 100644 --- a/49_group_anagrams/problem.md +++ b/49_group_anagrams/problem.md @@ -1 +1 @@ -## 問題: [560. Group Anagrams](https://leetcode.com/problems/group-anagrams/description/) +## 問題: [49. Group Anagrams](https://leetcode.com/problems/group-anagrams/description/)