哈希

字母异位词分组

中等#49Java时间 O(n k log k)空间 O(n k)

题目要做什么

把字符串数组中字符种类和数量相同的单词归为一组。各组与组内元素的顺序不影响答案。

题目示例输入strs = ["eat","tea","tan","ate","nat","bat"]
题目示例输出[["eat","tea","ate"],["tan","nat"],["bat"]]

01 为什么这样做

将每个单词排序,排序结果是它所属分组的唯一键。相同键的单词加入同一个列表。

始终成立的条件

map 中每个键对应的单词具有相同的排序结果。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public List<List<String>> groupAnagrams(String[] strs) {3        Map<String, List<String>> map = new LinkedHashMap<>();4        for (String s : strs) {5            char[] chars = s.toCharArray();6            Arrays.sort(chars);7            String key = new String(chars);8            map.computeIfAbsent(key, x -> new ArrayList<>()).add(s);9        }10        return new ArrayList<>(map.values());11    }12}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索