1、题目

  

  1. Given an array of strings, group anagrams together.
  2.  
  3. For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
  4. Return:
  5.  
  6. [
  7. ["ate", "eat","tea"],
  8. ["nat","tan"],
  9. ["bat"]
  10. ]
  11. 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. 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]
  6.  
  7. class Solution(object):
  8.  
  9. def groupAnagrams(self, strs):
  10. """
  11. :type strs: List[str]
  12. :rtype: List[List[str]]
  13. """
  14. map = {}
  15. for i in range(0 , len(strs)):
  16. str = strs[i]
  17. hash = self.hash_str(str)
  18. list = map.get(hash, None)
  19. if not list:
  20. list = []
  21. list.append(str)
  22. map[hash] = list
  23.  
  24. return map.values()
  25.  
  26. def hash_str(self, str):
  27. length = len(str)
  28. charAvalue = ord('a')
  29. if length > 0:
  30. hashSum = 1
  31. for i in range(0, length):
  32. hashSum = hashSum * primeTable[(ord(str[i]) - charAvalue)]
  33. return hashSum
  34. return 0
  35.  
  36. if __name__ == '__main__':
  37. s = Solution()
  38. print(s.groupAnagrams(["eat", "tea", "bat"]))

49-Group Anagrams-(Medium) 题解的更多相关文章

  1. 刷题49. Group Anagrams

    一.题目说明 题目是49. Group Anagrams,给定一列字符串,求同源词(包含相同字母的此)的集合.题目难度是Medium. 二.我的做法 题目简单,就不多说,直接上代码: class So ...

  2. LeetCode - 49. Group Anagrams

    49. Group Anagrams Problem's Link ------------------------------------------------------------------ ...

  3. 49. Group Anagrams - LeetCode

    Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List&l ...

  4. 49. Group Anagrams

    Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...

  5. leetcode@ [49] Group Anagrams (Hashtable)

    https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For exam ...

  6. 【LeetCode】49. Group Anagrams

    题目: Given an array of strings, group anagrams together. For example, given: ["eat", " ...

  7. 【一天一道LeetCode】#49. Group Anagrams

    一天一道LeetCode系列 (一)题目 Given an array of strings, group anagrams together. For example, given: [" ...

  8. [leetcode]49. Group Anagrams变位词归类

    Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...

  9. LeetCode OJ 49. Group Anagrams

    题目 Given an array of strings, group anagrams together. For example, given: ["eat", "t ...

  10. 49. Group Anagrams (string, HashTable)

    Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...

随机推荐

  1. win7 下安装 ubuntu 16.04双系统

    Ubuntu 每年发布两个版本,目前最新正式版版本也升到了 16.04.Ubuntu 16.04 开发代号为"Xenial Xerus",为第六个长期支持(LTS)版本,其主要特色 ...

  2. UVa 11790 - Murcia's Skyline

    题目大意:给一个建筑的序列,建筑用高度和宽度描述,找出按高度的LIS和LDS,最长XX子序列的长度按照序列中建筑的宽度和进行计算. 其实就是带权的最长XX子序列问题,原来是按个数计算,每个数权都是1, ...

  3. Linux_System2

    1.从服务器下载http*.tar.gz源码包,安装到/usr/local/apache目录下,要求安装时指定能够动态加载模块,能够支持地址回写功能,能够使用ssl加密功能../configure — ...

  4. Myeclipse程序调试快捷键及步骤详解

    Myeclipse程序调试快捷键及步骤详解: 调试快捷键    Eclipse中有如下一些和运行调试相关的快捷键.    1. [Ctrl+Shift+B]:在当前行设置断点或取消设置的断点.    ...

  5. hive CliDriver 源码分析

    664行 CliDriver main启动 public static void main(String[] args) throws Exception { int ret = new CliDri ...

  6. 网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置方法)

    原文链接:http://www.bzfshop.net/article/176.html 网站被攻击是一个永恒不变的话题,网站攻击的方式也是一个永恒不变的老套路.找几百个电脑(肉鸡),控制这些电脑同时 ...

  7. 阿里云上给的防止跨站和xss攻击的代码

    文档说明: 1.将waf.php传到要包含的文件的目录 2.在页面中加入防护,有两种做法,根据情况二选一即可: a).在所需要防护的页面加入代码require_once('waf.php');就可以做 ...

  8. js原生设计模式——2面向对象编程之继承—call(this)构造函数式继承

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. html标签默认样式整理

    引:http://www.jb51.net/web/94964.html 文为大家整理了html标签默认样式属性及浏览器默认样式等等,喜欢css布局的朋友们可以学下,希望对大家有所帮助 html, a ...

  10. 使用Intent创建Tab页面

    前面已经介绍了如何使用TabActivity来创建Activity布局,前面添加Tab页面使用了TabHost.TabSpec如下方法. setContent(int viewId):直接将指定Vie ...