49. 字母异位词分组
49. 字母异位词分组
分析
这个题跟 242. 有效的字母异位词 有本质区别,242 这个题是对比两个字符是否是字母异位词,而这个题是按照字母异位词分组,我们可以为每个字符串生成一个数组记录每个字符出现的次数,但是如何将特征数组相同的字符串进行保存呢?我们无法将特征数组再映射成一个整数,此时,就只能用高级的数据结构了 HashMap 了。
是的,字母异位词分组,只能用高级的数据结构 HashMap 来解决,官方题解的答案就是如此。
有了 HashMap,思路就简单了,我们也不需要用一个数组记录每个字符出现的次数了,直接对字符进行排序,这就是 Map 的 key,字符串的字符经过排序如果相同,即为字母异位词,放到同一个 List<String>
里面,这就是 value。
这样的题真的很无聊
解题
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> result = new HashMap<>();
for(int i=0;i<strs.length;i++){
char[] chars = strs[i].toCharArray();
Arrays.sort(chars);
String sortedStr = new String(chars);
List<String> targetList = result.getOrDefault(sortedStr,new ArrayList<String>());
targetList.add(strs[i]);
result.put(sortedStr,targetList);
}
return new ArrayList<List<String>>(result.values());
}