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.
有关异构字符串的题目,这道题让我们从一个字符串数组中将异构字符串分组,并且每组中是按照字母顺序排列的。
我们可以借助哈希表来完成。创建一个哈希表,让它的key为String,value为一个链表。每次从数组中取一个元素后,我们可以先将它转化为字符数组,然后排序后转换为一个字符串,这样一来所有的异构字符串都会变为相同一个在一个字符串,哈希表中的key就存放这个转换后的串。这样就可以把异构字符串分组了。代码如下:
public class Solution { public List<List<String>> groupAnagrams(String[] strs) { HashMap<String, List<String>> hm = new HashMap<String, List<String>>(); List<List<String>> llist = new ArrayList<List<String>>(); if(strs == null || strs.length == 0) return llist; for(int i = 0; i < strs.length; i++) { char[] tem = strs[i].toCharArray(); Arrays.sort(tem); String s = new String(tem); if(!hm.containsKey(s)) { hm.put(s, new ArrayList<String>()); } hm.get(s).add(strs[i]); } for(List list : hm.values()) { Collections.sort(list); llist.add(list); } return llist; } }