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())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律