diff --git a/49_group_anagrams/problem.md b/49_group_anagrams/problem.md new file mode 100644 index 0000000..60fecbf --- /dev/null +++ b/49_group_anagrams/problem.md @@ -0,0 +1 @@ +## 問題: [49. 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秒