力扣49(java)-字母异位词分组(中等)
题目:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 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] 仅包含小写字母
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
哈希表:
1.首先判断特殊情况,字符串数组为空就返回一个空的ArrayList集合;
2.字符串数组不为空,首先创建一个哈希表,然后将不同的字符串利用toCharArray()转换成char[]字符数组;
3.然后对char[]按照字母顺序进行排序;
4.再将排序后的字符串作为哈希表map中的key值,判断哈希表中是否有当前key值,若不存在,则为新的异位词语,在map中新建一个字符串集合作为value,然后将该当前键值对放在map中,如果存在,获取当前key对应的value(list集合),再将遍历的字符串s,添加到list集合中;
4.遍历完所有的字符串后,返回map中所有键值对象构成的list。
代码:
1 class Solution { 2 public List<List<String>> groupAnagrams(String[] strs) { 3 if (strs == null || strs.length == 0){ 4 return new ArrayList(); 5 } 6 //创建一个哈希表 7 HashMap<String, List> map = new HashMap<>(); 8 //遍历字符数组 9 for (String str : strs){ 10 //将每个字符串转换成字符数组 11 char[] chars = str.toCharArray(); 12 Arrays.sort(chars); 13 //将排序后的字符串数组转化为字符串,作为哈希表的key 14 String key = String.valueOf(chars); 15 //如果哈希表中不存在排序后的字符串key,则加入 16 if (!map.containsKey(key)){ 17 map.put(key,new ArrayList()); 18 } 19 //如果哈希表中存在的当前的key,说明当前字符串为字母异位词 20 map.get(key).add(str); 21 } 22 return new ArrayList(map.values()); 23 } 24 }
小知识:
String key = String.valueOf(chars):chars是字符数组类型,该句的意思就是将字符数组类型转换成字符串;
String.valueOf,这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符串“null”,而如果直接传入null,则会发生错误。
例如:
1 String teString=null; 2 teString=String.valueOf(teString); 3 System.out.println(teString);
因为确定了传入的是String类型,在valueOf调用对应构造函数时不会发生错误,因此,返回的是字符串“null”。
如果这样写 String.valueOf(null),则提示空指针。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)