题目:

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 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)-字母异位词分组(中等)的更多相关文章

  1. Java实现 LeetCode 49 字母异位词分组

    49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", & ...

  2. LeetCode 49: 字母异位词分组 Group Anagrams

    LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...

  3. Leetcode 49.字母异位词分组

    字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...

  4. 【LeetCode】49. 字母异位词分组

    49. 字母异位词分组 知识点:字符串:哈希表 题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源 ...

  5. LeetCode:字母异位词分组【16】

    LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...

  6. C#版 - Leetcode49 - 字母异位词分组 - 题解

    C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...

  7. leetcode TOP100 字母异位词分组

    字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 思路: 一个map,将每个字符串字符进行记数,字符作为map的key,次数初始为零,以此来标识字 ...

  8. Leetcode题目49.字母异位词分组(中等)

    题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "t ...

  9. LeetCode 49. 字母异位词分组(Group Anagrams)

    题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "ta ...

  10. LeetCode(49): 字母异位词分组

    Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...

随机推荐

  1. C++学习笔记之编程思想

    目录 编程思想 单例(Singleton)模式 观察者(Observer)模式 void*.NULL和nullptr C的类型转换 C++的类型转换 适配器(Adapter)模式 泛型编程的思想 模板 ...

  2. 17_详解YUV

    本文的主角是多媒体领域非常重要的一个概念:YUV. 简介 YUV,是一种颜色编码方法,跟RGB是同一个级别的概念,广泛应用于多媒体领域中. 也就是说,图像中每1个像素的颜色信息,除了可以用RGB的方式 ...

  3. 一个简单的RTMP服务器实现 --- RTMP与FLV

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  4. 不要升级!不要升级!MacOS 14.4 引发Java 应用崩溃

    如果最近您收到了MacOS 14.4的升级提醒,那么建议你暂时先不要升级! 在x上,Java开发领域的一些大v们,也发现了这个问题,并提醒大家不要升级. 根据Java官方发布的文章了解到,该问题主要是 ...

  5. 应急响应靶机训练-Linux1

    靶机来源: 知攻善防实验室公众号 https://mp.weixin.qq.com/s/gCWGnBiwbqSnafXU1apJCA 我是在另一台主机上通过ssh连接到靶机进行解题的,以下为解题记录. ...

  6. drools中no-loop和lock-on-active的区别

    一.背景 在我们编写drools规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别的规则导致该规则重新执行,也不需要执行,那么该怎么解决呢? 二.解决方案 针对以上问题 ...

  7. Markdown文档图片展示问题解决方案

    微信不支持Markdown排版 目前来看微信公众号是不支持Markdown语法的,所以就会出现Markdown预览,复制在粘贴完成吧. 从资料收集来看有一款出现频率比较高的插件 Markdown ni ...

  8. SQL Server表分区-水平分区3

    目录 一.常用分区步骤 1.创建文件组 2.创建数据文件到文件组里面 3.使用图形界面向导创建分区表(不推荐) 3.使用T-SQL构建分区函数与分区方案(推荐) [3.1]建表时构造 [3.2]已有表 ...

  9. ET8.1(一)简介

    此系列文章逐个内容讲解ET8.1的新特性. ET8.1 发布,带来以下新特性: 1. 多线程多进程架构,架构更加灵活强大,多线程设计详细内容请看多线程设计课程   2. 抽象出纤程(Fiber)的概念 ...

  10. FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx

    ​MP4是最常见的视频封装格式,在<FFmpeg开发实战:从零基础到短视频上线>一书的"1.2.3  自行编译与安装FFmpeg"介绍了如何给FFmpeg集成x264和 ...