当前位置: 首页 > article >正文

leetcode hot100【LeetCode 49. 字母异位词分组】java实现

LeetCode 49. 字母异位词分组

题目描述

给定一个字符串数组 strs,请你将所有的字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

Java 实现解法

方法一:使用 HashMap 存储排序后的字符串
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        
        for (String str : strs) {
            // 将字符串按字母顺序排序
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String key = new String(chars);

            // 根据排序后的字符串作为键存储异位词
            map.putIfAbsent(key, new ArrayList<>());
            map.get(key).add(str);
        }

        return new ArrayList<>(map.values());
    }
}

解题思路

  • 使用 HashMap:创建一个 HashMap,键为排序后的字符串,值为原始字符串的列表。
  • 排序:对于每个字符串,将其转换为字符数组,进行排序,然后转换回字符串作为 HashMap 的键。
  • 存储:如果 HashMap 中已经存在该键,则将原始字符串添加到对应的列表中;如果不存在,则创建一个新的列表,并将原始字符串添加到列表中,然后将键值对存入 HashMap。
  • 返回结果:最后,将 HashMap 中的所有值(即所有字母异位词的列表)添加到一个新的列表中,并返回这个列表。

这种方法的时间复杂度是 O(n * k * log(k)),其中 n 是字符串数组的长度,k 是字符串的最大长度。空间复杂度是 O(n * k),因为我们需要存储所有字符串的排序副本以及原始字符串的列表。
注意:此解法在实际应用中可能需要考虑字符串长度较大的情况,此时排序操作可能会影响性能。在某些情况下,可能需要考虑更高效的算法或数据结构。

注:题目来源leetcode网站


http://www.kler.cn/news/362361.html

相关文章:

  • PYQT5 简单项目实践
  • Chrome DevTools 三: Performance 性能面板扩展—— 性能优化
  • 【算法系列-栈与队列】匹配消除系列
  • laravel 查询数据库
  • FloodFill 算法(DFS)
  • mysql数据量分库分表
  • 理解多线程中的上下文切换:原理解析与Java模拟实现
  • 2024入门测参考答案(c语言版)
  • C#学习笔记(五)
  • 如何将logism电路转为verilog(一)
  • 【JavaScript】Javascript基础Day02:运算符、分支、循环
  • 从新手到高手:map和set的使用技巧全攻略(C++)
  • 自由学习记录(14)
  • ‌竞赛报名网站毕设计算机毕业设计基于SpringBootSSM框架
  • 第二十七篇:传输层讲解,TCP系列一
  • 内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇
  • 10. 异常处理器
  • 【某农业大学计算机网络实验报告】实验二 交换机的自学习算法
  • Python小程序 - 替换文件内容
  • Redis Search系列 - 第四讲 支持中文
  • 003:Context Capture10.16安装教程
  • Linux中如何理解一切皆文件
  • 【YOLO模型】(1)--YOLO是什么
  • Android 13 SPRD 如何临时修改 Android 系统版本
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-Tools助力(二)
  • w~自动驾驶合集9