-
Notifications
You must be signed in to change notification settings - Fork 0
/
0049__group_anagrams.py
69 lines (49 loc) · 1.77 KB
/
0049__group_anagrams.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""
Given an array of strings strs, group the anagrams together. You can return the answer in any order.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the
original letters exactly once.
## Example 1
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
## Example 2
Input: strs = [""]
Output: [[""]]
## Example 3
Input: strs = ["a"]
Output: [["a"]]
## Constraints
* 0 <= strs.length <= 10^4
* 0 <= strs[i].length <= 100
* strs[i] consists of lowercase English letters.
"""
from collections import defaultdict
from typing import List
from unittest import TestCase
class Solution(TestCase):
def test_example_1(self):
strings = ["eat", "tea", "tan", "ate", "nat", "bat"]
expected = [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
for i in range(len(expected)):
expected[i].sort()
expected.sort()
answer = self.groupAnagrams(strings)
for i in range(len(answer)):
answer[i].sort()
answer.sort()
self.assertEqual(expected, answer)
def test_example_2(self):
self.assertEqual([[""]], self.groupAnagrams([""]))
def test_example_3(self):
self.assertEqual([["a"]], self.groupAnagrams(["a"]))
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
result = defaultdict(list)
for word in strs:
counter = {}
for i in range(26):
char = chr(ord('a') + i)
counter[char] = 0
for char in word:
counter[char] += 1
key = "".join([f"{letter}#{cnt}" for letter, cnt in counter.items()])
result[key].append(word)
return list(result.values())