leetcode-49 字母异位词分组 哈希表 字典哈希 python dict
此题考查对哈希表的考查
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
自己实现的超时版本,超时的原因是 循环运用的次数太多,虽然是o(n),但是随着次数的增加,时间会非常慢。
from collections import Counter
def groupAnagrams(strs):
count_list = []
\#strs.sort()
for i in strs:
count_list.append(Counter(i))
res_final=[]
res=[]
res_value=[]
while len(count_list)>0:
now=count_list[0]
res.append(strs[0])
count_list.remove(now)
strs.remove(strs[0])
count_strs=0
for value in count_list:
#循环次数+1
if value==now:
res.append(strs[count_strs])
strs.remove(strs[count_strs])
count_strs-=1
count_strs+=1
count_list=[]
for i in strs:
#循环次数+1
count_list.append(Counter(i))
res_final.append(res)
res=[]
return res_final
\#strs=["","",""]
strs=["eat","tea","tan","ate","nat","bat"]
print(groupAnagrams(strs))
看完题解后
两个解题思路
1.排序 2.计数
使用python的dict数据结构很快就能实现 dict字典数据结构深入理解
解法一 排序
mp = collections.defaultdict(list)
for st in strs:
print(sorted(st))
key = "".join(sorted(st))
mp[key].append(st)
return list(mp.values())
解法二 计数
mp = collections.defaultdict(list)
for st in strs:
counts = [0] * 26
for ch in st:
counts[ord(ch) - ord("a")] += 1 #需要将 list 转换成 tuple 才能进行哈希
mp[tuple(counts)].append(st)
print(mp.values())
return list(mp.values())