• 49-Group Anagrams-(Medium) 题解


    1、题目

      

    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"]))
  • 相关阅读:
    [AS3]AMF3+JAVA的调用范例
    SmartFoxServer,多人flash游戏开发
    Flex2 发现之旅:在Flex中嵌入完整HTML页面
    让.Net 程序脱离.net framework框架运行
    ASP.NET 数据列表控件的分页总结
    中国移动飞信免费发短信API接口(第三方 Fetion API)[原创]
    Ubuntu下安装wine详细介绍
    SQL SERVER 2008 R2 序列号大全
    linux 下安装ATI 显卡驱动
    jdk 环境变量设置
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/6435449.html
Copyright © 2020-2023  润新知