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

[Java恶补day2] 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] 仅包含小写字母


知识点:
列表操作、字符串自身排序、哈希表操作


解:
观察题目要求的返回结果的类型是一个ArrayList:List<List<String>>
字母异位词,就是指某一个字符串所包含的字母,按照不同的顺序排列得到不同的字符串,这些字符串就构成同一个字母异位词
为了存储具有相同字母异位词的字符串,考虑将每个字符串内部进行排序,这样,遵循#1 两数之和相同的原理,用hashmap存储,key为字母异位词,value为对应的字符串本身所构成的一个列表,这样就能成功存储,并且复杂度如下:
时间复杂度为 O ( n k l o g k ) O(nk logk) O(nklogk),n=字符串数量,k=字符串中最大的字母数。这里n是因为有一个for循环,k logk就是Arrays.sort()的复杂度。
空间复杂度为 O ( n k ) O(nk) O(nk),n=字符串数量,k=字符串中最大的字母数。因为map存储元素存储的是排序后的字符串,因此是n*k。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> res = new ArrayList<>();Map<String, List<String>> map = new HashMap<>();//遍历每个stringfor (String str : strs) {//将每个string按照字母进行排序// System.out.println("old: "+str);char[] chars = str.toCharArray();Arrays.sort(chars);String newStr = new String(chars);// System.out.println("new: "+newStr);if (map.containsKey(newStr)) {//将相同的排序后的字符串放入map的同个位置List<String> value = map.get(newStr);value.add(str);map.put(newStr, value);} else {//否则,把当前字符串加入一个新位置List<String> value = new ArrayList<>();value.add(str);map.put(newStr, value);}}//返回map中的每个value,顺序任意for (List<String> value : map.values()) {res.add(value);}return res;}
}
http://www.xdnf.cn/news/577207.html

相关文章:

  • 【SW】从3D模型导出dxf图纸
  • 【算法专题十五】BFS解决最短路问题
  • 04_Prometheus监控docker容器(4)
  • 智慧社区新防线:华奥系AI技术如何让夏季安防“零隐患”
  • 如何在JavaScript中将数值转换为字符串并赋值给数组——以RuoYi-Vue项目为例
  • Redis Cluster动态扩容:架构原理与核心机制解析
  • 航电系统之航点跟踪系统篇
  • C++(27): 标准库 <iterator>
  • 逆向音乐APP:Python爬虫获取音乐榜单 (1)
  • Podman(Pod Manager)简介
  • 嵌入式STM32学习——串口USART 2.1(串口发送字符串和字符)
  • 应用分享 | 软件定义架构如何满足GNSS模拟测试的开放性需求?
  • JDK9~17语法新特性全览:Java语言的持续进化
  • Python数据可视化高级实战之二——热力图绘制探究
  • C++ 输出流格式控制
  • 起重的技术
  • wd软件安装
  • origin绘图之【如何将横坐标/x设置为文字、字母形式】
  • 升级SpringBoot2到3导致的WebServices升级
  • 数字化,一个泛化的概念
  • 使用Mathematica生成随机曼陀罗花
  • vue3请求设置responseType: ‘blob‘,导致失败后获取不到返回信息
  • 基于vue框架的动漫论坛g2392(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • ISO 26262-5 硬件验证
  • Python雷达图实战教程:从入门到精通
  • 磁盘分区与挂载——笔记
  • 深入理解Java虚拟机之垃圾收集器篇(垃圾回收器的深入解析待完成TODO)
  • 框架与组件版本备忘
  • LlamaIndex
  • Keepalived 基于 VRRP 的高可用设计与故障排查