给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
方法一:哈希表
经过遍历将共性(也就是要求的字母异位词的共性:单词个数相同,单词种类相同)作为键,个性作为值存储起来,二次查找时仅需要O(1)的时间复杂度。
注意:可变数据不能作为键
使用哈希表:后值与遍历过的值有联系。
class Solution(object): def groupAnagrams(self, strs): hash_map=collections.defaultdict(list) for str in strs: sort_str="".join(sorted(str)) hash_map[sort_str].append(str) return list(hash_map.values())时间复杂度:O(N * K log K)
空间复杂度:O(N * K)
方法二:计数法
以字符串所含字符的个数为键
class Solution(object): def groupAnagrams(self, strs): mp=collections.defaultdict(list) for str in strs: counts=[0]*26 for char in str: counts[ord(char)-ord("a")]+=1 mp[tuple(counts)].append(str) return list(mp.values())总结:
1.哈希:解决以O(1)时间复杂度寻找遍历过后的元素
2.mp=collections.defaultdict(list) 初始化字典,在没有键的时候不报错,默认创建list
3.可变变量不能作为键