49. 字母异位词分组
方法一:排序
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs.length == 0){
return new ArrayList();
}
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String(array);
if(!map.containsKey(key)){
map.put(key, new ArrayList<String>());
}
map.get(key).add(str);
}
return new ArrayList<List<String>>(map.values());
}
}
方法二:计数
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs.length == 0){
return new ArrayList();
}
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
int[] counts = new int[26];
int length = str.length();
for (int i = 0; i < length; i++) {
counts[str.charAt(i) - 'a']++;
}
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < 26; i++) {
if (counts[i] != 0) {
sb.append((char)('a' + i));
sb.append(counts[i]);
}
}
String key = sb.toString();
if(!map.containsKey(key)){
map.put(key, new ArrayList<String>());
}
map.get(key).add(str);
}
return new ArrayList<List<String>>(map.values());
}
}