49. Group Anagrams
来源:互联网 发布:windows sdk v8.1下载 编辑:程序博客网 时间:2024/05/01 23:42
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:
For the return value, each inner list’s elements must follow the lexicographic order.
All inputs will be in lower-case.
思路:把每个字符串进行重排序生成新的字符串,生成相同字符串的放在一起。
public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> r = new ArrayList<List<String>>(); if (strs.length < 1) { return r; } Arrays.sort(strs); HashMap<String, List<String>> table = new HashMap<String, List<String>>(); for (String s : strs) { char[] c = s.toCharArray(); Arrays.sort(c); String t = new String(c); if (table.containsKey(t)) { List<String> tmp = table.get(t); tmp.add(s); } else { List<String> tmp = new ArrayList<String>(); tmp.add(s); table.put(t, tmp); } } Set<String> set = table.keySet(); for (String s :set) { List<String> tmp = table.get(s); r.add(tmp); } return r; }
不排序的话可以考虑写一个hash函数:每个小写字母代表一个素数,hash函数就是字符串内所有字符代表质数的积,求得相同hash的放在一起。
public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> r = new ArrayList<List<String>>(); if (strs.length < 1) return r; //素数表 int[] prime = new int[]{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, 107}; Arrays.sort(strs); HashMap<Integer, List<String>> table = new HashMap<Integer, List<String>>(); for (String s : strs) { char[] c = s.toCharArray(); //计算hash int primes = 1; for(int i = 0; i < c.length;i++){ primes *= prime[c[i]-'a']; } if (table.containsKey(primes)) { List<String> tmp = table.get(primes); tmp.add(s); } else { List<String> tmp = new ArrayList<String>(); tmp.add(s); table.put(primes, tmp); } } Set<Integer> set = table.keySet(); for (Integer s :set) { List<String> tmp = table.get(s); r.add(tmp); } return r; }
0 0
- 49. Group Anagrams
- [leetcode] 49.Group Anagrams
- 49. Group Anagrams
- LeetCode 49. Group Anagrams
- [LeetCode]49. Group Anagrams
- leetcode 49. Group Anagrams
- 49. Group Anagrams LeetCode
- 49. Group Anagrams
- 49. Group Anagrams
- 49. Group Anagrams
- Leetcode 49. Group Anagrams
- 49. Group Anagrams
- LeetCode 49. Group Anagrams
- 49. Group Anagrams
- 49. Group Anagrams
- LeetCode 49. Group Anagrams
- [leetcode] 49. Group Anagrams
- LeetCode 49. Group Anagrams
- hdoj 3832 Earth Hour 【最短路&&SPFA】
- macJavascript调用动态链接库
- 机器视觉学习笔记(9)——一个双目测距的简单实例
- Android----PinnedSectionListView
- rpm源
- 49. Group Anagrams
- 从实体和关系角度看 PowerDesigner 设计数据库模型
- 为什么要使用HibernateCallback
- Maven查找依赖树,解决jar包冲突问题
- LeetCode 191 Number of 1 Bits(1 比特的数字们)
- Memcached服务器安装、配置
- 【tyvj1208】最长不下降子序列2
- 关于android的Notification的若干问题
- 汇智网node学习笔记