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

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.mrgr.cn/news/57213.html

相关文章:

  • 如何在 HarmonyOS NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?
  • 【Petri网导论学习笔记】Petri网导论入门学习(七) —— 1.5 并发与冲突
  • Echarts提示框(tooltip)浮层显示不全
  • Git第二章
  • Vue学习记录之十九 Event Loop,宏任务和微任务
  • 微信小程序实现录音,播放录音功能
  • ScheduledThreadPoolExecutor的源码剖析
  • Visual Studio2022 Profile 工具使用
  • netty之ChannelPipeline和ChannelHandler
  • 【网络】HTTP协议(下)
  • 深信服超融合HCI6.8.0R2滚动热升级至HCI6.9.1
  • 京东 北京 java 中级: 哪些情况下的对象会被垃圾回收机制处理掉? 哪些对象可以被看做是 GC Roots 呢?对象不可达,一定会被垃圾收集器回收么?
  • 列表、元组、集合、字典和 pandas 数据框(DataFrame)之间的数据转换
  • JavaScript(操作元素属性:样式style,className,classList,表单元素,自定义属性,间歇函数)注册用户协议同意倒计时
  • 【C++篇】探索STL之美:熟悉使用String类
  • 【AIGC】AI时代降临,AI文案写作、AI绘画、AI数据处理
  • 时空智友企业流程化管控系统uploadStudioFile接口存在任意文件上传漏洞
  • static、 静态导入、成员变量的初始化、单例模式、final 常量(Content)
  • 【Python系列】poetry安装依赖
  • 并行计算的未来:大型模型的训练与优化
  • H5的Canvas绘图——使用fabricjs绘制一个可多选的随机9宫格
  • class 9: vue.js 3 组件化基础(2)父子组件间通信
  • vscode使用socks5代理ssh-remote
  • 李沐_动手学深度学习_模型选择
  • 算法学习5
  • 【Linux】磁盘文件系统(inode)、软硬链接