力扣HOT100-2 字母异位词分组(Java实现)

题目

题目解读

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());
    }

感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。