力扣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());
    }
}

最后大功告成!

相关推荐
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
颜酱3 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919103 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878383 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
DuHz3 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
invicinble4 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
Polaris北极星少女4 小时前
TRSV优化2
算法
较真的菜鸟4 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖4 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言