题目:

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

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

示例 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. Python根据时间命名并创建文件源码

    自己写的,产品中验证ok的代码,直接上实例: import time def file_create_func(): loca = time.strftime('%Y-%m-%d-%H-%M-%S') ...

  2. cpprestsdk有bug.

    好不容易将cpprestsdk移植到MinGW,并编译通过,出于安全还是先将samples还有tests测试一下是否正常. 用samples/blackjack一测试就出现奇葩现象,server一端会 ...

  3. 记录--7个Js async/await高级用法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 7个Js async/await高级用法 JavaScript的异步编程已经从回调(Callback)演进到Promise,再到如今广泛使 ...

  4. PHP 数据库表单创建方法记录(储存三方接口数据必用)

    最近项目在对接第三方接口数据,这里分享下我用来偷懒的一个PHP方法: /** * 数据库表单创建方法 * @return string * @throws \Exception */ public f ...

  5. kali局域网断网攻击

    首先我们打开我们熟悉的kali linux操作系统,利用指令: ifconfig 来确认本机的ip地址 确认了本机的ip地址之后,利用一下的指令查看局域网下所有ip: fping -g 本机IP地址/ ...

  6. 使用自签名证书在Docker中部署Asp.Net Core(Abp)项目

    一 编写Dockerfile文件 FROM mcr.microsoft.com/dotnet/aspnet:6.0 COPY / /app WORKDIR /app EXPOSE 80 ENTRYPO ...

  7. dotnet转换webservice返回的dataset

    string paras = "p1=test1&p2=test2";//参数 byte[] bytes = Encoding.UTF8.GetBytes(paras); ...

  8. [apue] 进程控制那些事儿

    进程标识 在介绍进程的创建.启动与终止之前,首先了解一下进程的唯一标识--进程 ID,它是一个非负整数,在系统范围内唯一,不过这种唯一是相对的,当一个进程消亡后,它的 ID 可能被重用.不过大多数 U ...

  9. .NET开源、免费、跨平台的Git可视化管理工具

    前言 俗话说得好"工欲善其事,必先利其器",合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛.今天大姚给大家分享一款.NET Avalonia开源.免费.跨平台.快速的 ...

  10. spark和hadoop的区别

    hadoopHadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分 ...