力扣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),则提示空指针。
力扣49(java)-字母异位词分组(中等)的更多相关文章
- Java实现 LeetCode 49 字母异位词分组
49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", & ...
- LeetCode 49: 字母异位词分组 Group Anagrams
LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...
- Leetcode 49.字母异位词分组
字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...
- 【LeetCode】49. 字母异位词分组
49. 字母异位词分组 知识点:字符串:哈希表 题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源 ...
- LeetCode:字母异位词分组【16】
LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- leetcode TOP100 字母异位词分组
字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 思路: 一个map,将每个字符串字符进行记数,字符作为map的key,次数初始为零,以此来标识字 ...
- Leetcode题目49.字母异位词分组(中等)
题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "t ...
- LeetCode 49. 字母异位词分组(Group Anagrams)
题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "ta ...
- LeetCode(49): 字母异位词分组
Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...
随机推荐
- 软件推荐: Sourcetree git软件
注意事项: 破解的时候,json文件目录不是软件exe所在目录,是数据目录 %LocalAppData%\Atlassian\SourceTree 还有就是第一次运行弹出个 有个插件要不要用,选第3个 ...
- uniapp踩坑记录
sessionStorage.setItem('token', data.msg)uni.setStorage('token', res.data); 搞了半天登录后直接通过获取getstorage获 ...
- jsp转换成html
相信很多人都希望自己的页面越快越好,最好是能静态的,提高客户访问速度.也便于搜索引擎搜索.所以,就希望我们的动态读取数据库的页面,尽可能的生成静态页面.一下系列文章,介绍一下个人的解决方案. ...
- 14_编译FFmpeg
本文来详细讲解一下:如何在Mac.Windows环境下成功编译FFmpeg. 目标 这里先提前说明一下,最后希望达到的效果: 编译出ffmpeg.ffprobe.ffplay三个命令行工具 只产生动态 ...
- HMAC算法:数据传输的保护神
HMAC算法起源: HMAC(Hash-based Message Authentication Code)算法是由Mihir Bellare.Ran Canetti和Hugo Krawczyk于19 ...
- 用phpStudy配置apache服务器
一:下载phpStudy 1进入官网https://www.xp.cn/download.html 选择稳定的2018版本 2执行下载好的文件,选择下载地址 注意!这里的安装路径不能有中文 3亮两个绿 ...
- uni学习笔记分享
目录介绍 01.遇到问题汇总 02.关于布局设置 03.基础语法总结 04.关于交互问题 06.关于回传数据 07.关于网络请求 08.关于页面刷新 09.关于注意问题 10.待解决和思考 01.遇到 ...
- Android线程池封装库
目录介绍 1.遇到的问题和需求 1.1 遇到的问题有哪些 1.2 遇到的需求 1.3 多线程通过实现Runnable弊端 1.4 为什么要用线程池 2.封装库具有的功能 2.1 常用的功能 3.封装库 ...
- 一招搞定进制转换--java篇
java中进制转化只需要记住这两个方法,后续再遇到进制转换的问题,轻松破解! 进制转换的核心就是: 其他进制--->十进制--->其他进制 1.其他进制转成十进制 valueOf() 方法 ...
- 我们正在被 DDoS 攻击,但是我们啥也不干,随便攻击...
最近,一场激烈的攻防大战在网络世界悄然上演. 主角不是什么国家安全局或者黑客组织,而是一家名不见经传的创业公司--TablePlus. DDoS 攻击者们摩拳擦掌,跃跃欲试.他们从四面八方蜂拥而至,誓 ...