
排序法
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> result = new ArrayList<>();
HashMap<String,List<String>> map = new HashMap<>();
for(String str : strs){
char[] chars =str.toCharArray();
Arrays.sort(chars);
String strKey = new String(chars);
if(!map.containsKey(strKey)){
List<String> valueList = new ArrayList<>();
valueList.add(str);
map.put(strKey,valueList);
}else{
List<String> valueList =map.get(strKey);
valueList.add(str);
map.put(strKey,valueList);
}
}
map.values().forEach(
list->{
result.add(list);
}
);
System.out.println(result.size());
return result;
}
哈希法
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,ArrayList<String>> result = new HashMap<>();
for(String s : strs){
int[] count_talbe= new int[26];
for(char c : s.toCharArray()){
count_talbe[c-'a']++;
}
StringBuilder sb = new StringBuilder();
for(int count : count_talbe){
sb.append("#");
sb.append(count);
}
String key = sb.toString();
if(!result.containsKey(key)){
result.put(key,new ArrayList<>());
}
result.get(key).add(s);
}
return new ArrayList(result.values());
}