面试题 10.02. 变位词组
变位词是指字母相同,但排列不同的字符串。
方法一:
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
if not strs:return []
strs.sort(key=len) # 按长度排序
res=[[strs[0]]]
for s in strs[1:]:
ss = sorted(s)
for m in res[::-1]: # 从最长串开始
if len(m[0])!=len(s):
res.append([s])
break
if ss == sorted(m[0]):
m.append(s)
break
else:# 大小相同,但不是变位词组
res.append([s])
return res
方法二:
使用哈希表存储每一组变位词,哈希表的键为一组变位词的标志(字母相同),哈希表的值为一组变位词列表。
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
# mp = collections.defaultdict(list)
mp = {}
for st in strs:
key = "".join(sorted(st))
if key not in mp: # 字典不存在的 key 处理
mp[key] = []
mp[key].append(st)
return list(mp.values())