49 Group Anagrams
2015-09-29 21:49
197 查看
题目链接:https://leetcode.com/problems/anagrams/
题目:
解题思路:
题目的意思很明白,就是把具有相同字符的字符串放在同一个子列表中。
判断两个字符串由相同的字符组成(字符之间的顺序未必相同)的方法,就是对字符串进行排序,使它们成为相同的字符串。
为了能快速找到字符串的同伴(包含同类字符串的列表),把它们都放在一个 HashMap < String,list> 中,其中键为排过序的字符串,值为与键具有相同字符的未排序的字符串。这样,我们对数组中的字符串本身先排序,再以已排序的串作为键来查找其归属的列表,最后把未排序的串加入到 list 中。
题目还要求在每个子列表中,字符串要按字典序排列。使用
对列表元素排序。
需要注意的是,重写的 compare 方法是 public 的,不写 public 默认包访问权限小于原本的公有权限,会报编译错误。
代码实现:
题目:
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.
解题思路:
题目的意思很明白,就是把具有相同字符的字符串放在同一个子列表中。
判断两个字符串由相同的字符组成(字符之间的顺序未必相同)的方法,就是对字符串进行排序,使它们成为相同的字符串。
为了能快速找到字符串的同伴(包含同类字符串的列表),把它们都放在一个 HashMap < String,list> 中,其中键为排过序的字符串,值为与键具有相同字符的未排序的字符串。这样,我们对数组中的字符串本身先排序,再以已排序的串作为键来查找其归属的列表,最后把未排序的串加入到 list 中。
题目还要求在每个子列表中,字符串要按字典序排列。使用
Collections.sort(list, new Comparator<String>() { public int compare(String a, String b) return a.compareTo(b); });
对列表元素排序。
需要注意的是,重写的 compare 方法是 public 的,不写 public 默认包访问权限小于原本的公有权限,会报编译错误。
代码实现:
public class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> res = new ArrayList(); if(strs == null || strs.length == 0) return res; HashMap<String, List<String>> map = new HashMap(); for(String str : strs) { char[] strtemp = str.toCharArray(); Arrays.sort(strtemp); String sortStr = String.valueOf(strtemp); if(map.containsKey(sortStr)) map.get(sortStr).add(str); else { List<String> list = new ArrayList(); list.add(str); map.put(sortStr, list); } } for(Map.Entry<String, List<String>> m : map.entrySet()) { List<String> list = m.getValue(); Collections.sort(list, new Comparator<String>() { public int compare(String a, String b) { return a.compareTo(b); } }); res.add(list); } return res; } }
100 / 100 test cases passed. Status: Accepted Runtime: 29 ms
相关文章推荐
- 测试基础知识点1
- 四则运算
- 四则运算测试
- 第7课 nodejs请求响应
- linux tar打包指令
- DirectX11 曲面细分阶段
- 搬家了(http://13kv.com/)
- Missing artifact javax.transaction:jta:jar:1.0.1B解决办法
- 向datagrid中动态添加不重复的记录,easyuidatagrid添加
- 使用OpenRowSet操作Excel
- HDU 3374 String Problem(最大最小表示法 模板题)
- ISC2015听会小计
- HDU 4545 魔法串(西山居挑战赛)
- Linux系统上安装字体
- PID参数的整定
- 搬家了(http://13kv.com/)
- 买卖精灵一---波段买卖
- Multitier architecture
- UVA 1588_Kickdown
- 可展开列表组件ExpandableListView解析