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.
有关异构字符串的题目,这道题让我们从一个字符串数组中将异构字符串分组,并且每组中是按照字母顺序排列的。
我们可以借助哈希表来完成。创建一个哈希表,让它的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;
}
}