力扣49.字母异位词分组

题目描述:

49. 字母异位词分组

难度 中等

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

复制代码
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

复制代码
输入: strs = [""]
输出: [[""]]

示例 3:

复制代码
输入: strs = ["a"]
输出: [["a"]]

解题思路分析:

题目意思简而言之就是,所有输入的单词,不关注单词中字母的排列顺序,只要字母都相同的就分为一组。

那么我们可以创建一个map集合,map集合的key存放每个单词排序后的字符串,map集合的value存放一个List集合(该集合中存放所有字母都相同的单词)。

实现步骤:

1.将输入的字符串数组分别循环取出

2.取出字符数组中的单个字符串后,再将将每个字符串转成字符数组

3.把字符数组排序后再转成字符串作为map集合的key

4.查看map集合中是否有排序后字符串的key对应的值,没有则对该key创建一个value值(ArrayList<String>)

5.将当前的字符串存放到当前key对应的map集合中

6.创建一个ArrayList集合存入所有map集合的value后返回【return ArrayList<List<String>>(map.values())】

**注意:**List<String> list = map.getOrDefault(key, new ArrayList<String>()); 这里用List接收(向上转型,这个是java基础不清楚的小伙伴可以去回顾一下这里不再赘述)

代码:

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap();
        // 循环每个字符串数组
        for (String str : strs) {
            // 将字符串数组转成字符数组
            char[] chars = str.toCharArray();
            // 将字符数组中的字符排序
            Arrays.sort(chars);
            // 将排序后的字符数组转成新的排序后字符串
            String key = new String(chars);
            // 获取当前map集合中key对应的list集合,没有则新建一个list集合
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前字符串添加到list集合中
            list.add(str);
            // 存入排序后的字符串作为key,存入当前字符串
            map.put(key, list);
        }
        // 取出map中的所有value放入ArrayList集合中返回 
        return new ArrayList<List<String>>(map.values());
    }
}

最后大功告成!

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm
猎头南楼5 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
vipxieliang5 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot