首先初始化 key = "0#0#0#0#0#",数字分别代表 abcde 出现的次数,# 用来分割。
这样的话,"abb" 就映射到了 "1#2#0#0#0"。
"cdc" 就映射到了 "0#0#2#1#0"。
"dcc" 就映射到了 "0#0#2#1#0"。
代码如下:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// Corner case
if(strs.length == 0){
return new ArrayList<>();
}
Map<String, List<String>> map = new HashMap<>();
for(String str: strs){
int[] count = new int[26];
//We must use toCharArray() method here
for(char c: str.toCharArray()){
count[c - 'a']++;
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 26; i++){
sb.append(count[i]);
sb.append('#');
}
String stringKey = sb.toString();
if(map.containsKey(stringKey)){
map.get(stringKey).add(str);
}else{
List<String> anagram = new ArrayList<>();
anagram.add(str);
map.put(stringKey, anagram);
}
}
return new ArrayList<>(map.values());
}
}