题目

题目解读
1.词组只包含小写字母
2.异位词就是字母位序不一致而已,那么反过来,字母位序一致就算做一组答案
开始解题
一、排序法
思路:
互为字母异位词的单词,排序后会得到完全相同的字符串。
比如 "eat" 排序 → "aet","tea" 排序 → "aet"。
因此,我们可以把排序后的字符串作为 key,把所有 key 相同的原始字符串放进同一个列表。
核心流程:
1.创建一个 HashMap<String, List<String>> map。
2.遍历 strs 中的每个字符串 s:
3.将 s 转成字符数组 chars,对 chars 排序。
4.用排序后的字符数组创建一个新字符串 key。
5.使用 map.computeIfAbsent(key, k -> new ArrayList<>()).add(s),将 s 加到 key 对应的列表中。computeIfAbsent()方法的作用是有则直接获取对应值,无则put一个{key,new ArrayList\<\>()}存入
6.将 map.values() 包装成 ArrayList 并返回。
代码
java
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (String s : strs) {
char[] chars = s.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
map.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
}
return new ArrayList<>(map.values());
}
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。