49.Group Anagrams
1 - Sort + HashTable
O(N * K * log(K))
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs.length == 0){
return new ArrayList();
}
Map<String, List<String>> ans = new HashMap<>();
for(String s : strs){
char[] tmpArray = s.toCharArray();
Arrays.sort(tmpArray);
String key = String.valueOf(tmpArray);
if(!ans.containsKey(key))
ans.put(key, new ArrayList<String>());
ans.get(key).add(s);
}
return new ArrayList(ans.values());
}
}
2 - By Cnt
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs.length == 0) return new ArrayList();
Map<String, List> ans = new HashMap<String, List>();
int[] count = new int[26];
for (String s : strs) {
Arrays.fill(count, 0);
for (char c : s.toCharArray()) count[c - 'a']++;
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < 26; i++) {
sb.append('#');
sb.append(count[i]);
}
String key = sb.toString();
if (!ans.containsKey(key)) ans.put(key, new ArrayList());
ans.get(key).add(s);
}
return new ArrayList(ans.values());
}
}