题目

题目解读

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 并返回。

        代码

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

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

更多推荐