一、问题描述
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.
二、问题分析
学过化学的都知道同素异形体,该题类似。题目要求lexicographic order,因此需要排序。题目又告诉lexicographic order,因此需要进行排序。因为不同的anagrams对应于相同的字符combinations,因此可以采用hashTable来解决。
三、Java AC代码
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> list = new ArrayList<List<String>>();
if(strs==null || strs.length==0){
return list;
}
Arrays.sort(strs);
HashMap<String ,List<String>> map = new HashMap<String, List<String>>();
for(String str : strs){
char[] tmp = str.toCharArray();
Arrays.sort(tmp);
String sortStr = String.valueOf(tmp);
if (!map.keySet().contains(sortStr)) {
map.put(sortStr, new ArrayList<String>());
}
map.get(sortStr).add(str);
}
for (String str : map.keySet()) {
list.add(map.get(str));
}
return list;
}