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

最后大功告成!

相关推荐
karry_k1 天前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k1 天前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
vibecoding日记1 天前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr21381 天前
Verilog参数化游程编码RLE模块
算法
SamDeepThinking1 天前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
望易1 天前
刚设计的大模型架构-双域耦合认知框架
算法·架构
她的男孩1 天前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
复杂网络1 天前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
荣码1 天前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python