LeetCode 49 字母异位词分组

题目描述

字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

解法

解法1:排序 + 哈希

两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。

遍历每个字符串,对于每个字符串,得到该字符串所在的一组字母异位词的标志,将当前字符串加入该组字母异位词的列表中。遍历全部字符串之后,哈希表中的每个键值对即为一组字母异位词。

java代码:

class Solution {
   
    public List<List<String>> groupAnagrams(String[] strs) {
   
        // 维护hash
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
   
            char[] chars = str.toCharArray();
            // 排序
            Arrays.sort(chars);
            String key = new String(chars);
            // 根据key更新hash
            List<String> list = map.getOrDefault(key, new ArrayList<>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<>(map.values());
    }
}

复杂度

  • 时间复杂度:O(nklogk), n 是 strs中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klog⁡k)的时间进行排序以及 O(1)的时间更新哈希表。
  • 空间复杂度:O(nk)

相关推荐

  1. LeetCode 49 字母分组

    2024-01-24 13:40:05       38 阅读
  2. LeetCode49字母分组

    2024-01-24 13:40:05       12 阅读
  3. leetcode_49.字母分组

    2024-01-24 13:40:05       11 阅读
  4. leetcode49字母分组

    2024-01-24 13:40:05       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-24 13:40:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-24 13:40:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-24 13:40:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-24 13:40:05       18 阅读

热门阅读

  1. 文心一言 VS ChatGPT

    2024-01-24 13:40:05       35 阅读
  2. ubuntu下使用python3的venv虚拟环境

    2024-01-24 13:40:05       37 阅读
  3. C语言大师(8)异常处理

    2024-01-24 13:40:05       28 阅读
  4. 查看现有的conda源

    2024-01-24 13:40:05       34 阅读
  5. HBase学习五:运维排障之宕机恢复

    2024-01-24 13:40:05       43 阅读
  6. 【FINEBI】finebi中常用图表类型及其适用场景

    2024-01-24 13:40:05       32 阅读
  7. 蓝桥杯-1矩阵切割(c/c++)

    2024-01-24 13:40:05       34 阅读
  8. 【AI】深度学习在编码中的应用(3)

    2024-01-24 13:40:05       29 阅读
  9. gin中使用validator做参数校验

    2024-01-24 13:40:05       40 阅读
  10. Redis-2

    Redis-2

    2024-01-24 13:40:05      35 阅读
  11. Python3多线程爬虫实例讲解

    2024-01-24 13:40:05       36 阅读
  12. 邦芒支招:10种小妙招让你准时下班

    2024-01-24 13:40:05       33 阅读
  13. MongoDB用户权限相关

    2024-01-24 13:40:05       32 阅读
  14. 大数据基础设施搭建 - Hbase

    2024-01-24 13:40:05       25 阅读