当前位置: 首页 > 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;}
}

相关文章:

  • 深入理解 Pre-LayerNorm :让 Transformer 训练更稳
  • Java虚拟机栈
  • leetcode hot100刷题日记——7.最大子数组和
  • 计算机视觉与深度学习 | Python实现CEEMDAN-ISOS-VMD-GRU-ARIMA时间序列预测(完整源码和数据)
  • 目标检测基础知识
  • 目标检测135个前沿算法模型汇总(附源码)!
  • vue项目启动报错(node版本与Webpack)
  • vue-cli 构建打包优化(JeecgBoot-Vue2 配置优化篇)
  • MEMO数据DID与ZK技术:赋能RWA代币化与可信流通的新基石
  • C++ 01.vscode配置c++开发环境
  • C++语法理解记录
  • 安卓开发用到的设计模式(1)创建型模式
  • 缺乏经验的 PCB 过孔建模方法
  • NIFI的处理器:JSLTTransformJSON 2.4.0
  • 基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)
  • 【神经网络与深度学习】流模型的通俗易懂的原理
  • Simon J.D. Prince《Understanding Deep Learning》
  • vscode连接WSL卡住
  • jvm调优以及常见jvm问题解决等
  • chrono类 根据duration 类的周期类型得到对应的周期名称
  • 网站开发师职责/百度账号一键登录
  • 北京家装设计公司/百度搜索关键词排名优化技术
  • 有什么做数学题的网站/seo职位
  • 武汉网站多少/百度推广怎么找客户
  • 免费域名解析网站建设/推广网站免费
  • 网站开发分类/seo外包公司报价