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

最后大功告成!

相关推荐
城管不管8 分钟前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨18 分钟前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
月疯31 分钟前
二分法算法(水平等分图形面积)
算法
豆瓣鸡43 分钟前
算法日记 - Day3
java·开发语言·算法
白白白小纯1 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
萧瑟余晖1 小时前
Java深入解析篇九之NIO详解
java·网络·nio
Achou.Wang1 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
The Chosen One9851 小时前
高进度算法模板速记(待完善)
java·前端·算法
极光代码工作室3 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
圣保罗的大教堂4 小时前
leetcode 3517. 最小回文排列 I 中等
leetcode