1. 题目
2. 思路
这道题的思路不是那么好想到。有两种解决方法:(1)暴力法;但是这种方法的复杂度还是挺高的。(2)映射法。因为是需要把由相同字母组成的单词放到一块儿,所以可以理解成相同字母的单词的key是相同的。那么怎么得到这个key呢?可以用数组记录。
3. 代码
from collections import defaultdict
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
key = [0]*26 # 26个英文字母
str2list = defaultdict(list)
for s in strs:
key = [0]*26 # 26个英文字母
for char in s:
idx = ord(char) - ord('a') # 当前字符的下标
key[idx] += 1
key = [str(i) for i in key]
cur_key = "_".join(key)
# print(cur_key)
str2list[cur_key].append(s)
res = []
for item in str2list.items():
res.append(item[1])
# print(res)
return res