算法(字母异位词分组)

2.字母异位词分组

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

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

输出:[["bat"],["nat","tan"],["ate","eat","tea"]]

解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 "bat"
  • 字符串 "nat""tan" 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 "ate""eat""tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [""]

输出:[[""]]

示例 3:

输入: strs = ["a"]

输出:[["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母
java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();
        for(String s : strs){
            //1.把字符串转为字符数组,排序
            char[] arr = s.toCharArray();
            Arrays.sort(arr);
            String key = new String(arr);//排序后的字符串作为key 

            //按key分组(get:只拿值,考好了要自己进行判空;put:强制覆盖旧值;computeIfAbsent:不存在才创建,存在在复用,极简代码)
            map.computeIfAbsent(key,k -> new ArrayList<>()).add(s);
        }
        //把所有分组收集成结果
        return new ArrayList<>(map.values());
    }
}
相关推荐
啊我不会诶1 小时前
2025浙江省赛补题
c++·算法
故事和你911 小时前
洛谷-算法2-1-前缀和、差分与离散化2
开发语言·数据结构·算法·深度优先·动态规划·图论
贾斯汀玛尔斯1 小时前
每天学一个算法--DFS / BFS
算法·深度优先·宽度优先
郝学胜-神的一滴2 小时前
epoll 边缘触发 vs 水平触发:从管道到套接字的深度实战
linux·服务器·开发语言·c++·网络协议·unix
cpp_25012 小时前
P1877 [HAOI2012] 音量调节
数据结构·c++·算法·动态规划·题解·洛谷·背包dp
Gary Studio2 小时前
基于PMSM理论研究加实践
算法
Carsene2 小时前
开篇:我们距离理想的 Java SQL DSL 还有多远?
java·sql
敖正炀2 小时前
集合-List-LinkedList
java
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第9题:HashMap根据key查询元素的时间复杂度是多少
java·开发语言·数据结构·后端·面试·哈希算法·哈希表