49-Group Anagrams-(Medium) 题解
1、题目
1 2 3 4 5 6 7 8 9 10 11 | Given an array of strings, group anagrams together. For example, given: [ "eat" , "tea" , "tan" , "ate" , "nat" , "bat" ], Return: [ [ "ate" , "eat" , "tea" ], [ "nat" , "tan" ], [ "bat" ] ] Note: All inputs will be in lower- case . |
2、分析,该题目可以针对每个字符串进行排序,然后计算每个字符串的hash值进行归类
3、优化、在计算hash值的时候,考虑hash算法跟字符串排序无关,也就是不用进行排序,针对26个字母分配26个质数,然后将hash函数设置为每个字母映射的质数乘积,便不用进行排序了,该方法利用了质数的特性
两个质数相乘得到一个合数,这个合数不会分解为其它质数的乘积
4、代码:
1 #!/usr/local/bin/python3 2 # -*- coding: utf-8 -*- 3 __author__ = 'qqvipfunction' 4 5 6 primeTable = [2,3,5,7,11, 13,17,19,23,29, 31,37,41,43,47, 53,59,61,67,71, 73,79,83,89,97, 101] 7 8 class Solution(object): 9 10 def groupAnagrams(self, strs): 11 """ 12 :type strs: List[str] 13 :rtype: List[List[str]] 14 """ 15 map = {} 16 for i in range(0 , len(strs)): 17 str = strs[i] 18 hash = self.hash_str(str) 19 list = map.get(hash, None) 20 if not list: 21 list = [] 22 list.append(str) 23 map[hash] = list 24 25 return map.values() 26 27 def hash_str(self, str): 28 length = len(str) 29 charAvalue = ord('a') 30 if length > 0: 31 hashSum = 1 32 for i in range(0, length): 33 hashSum = hashSum * primeTable[(ord(str[i]) - charAvalue)] 34 return hashSum 35 return 0 36 37 38 39 if __name__ == '__main__': 40 s = Solution() 41 print(s.groupAnagrams(["eat", "tea", "bat"]))
分类:
算法相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架