【Leetcode Hot 100刷题路线】| 找工作速刷 | 第23题 - [49] - 字母异位词分组

题目导航

题目描述

给定一个字符串数组 strs,将其中所有字母异位词组合在一起。字母异位词指字母相同但排列不同的字符串。

示例 :

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

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

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

题解

我使用的是排序+哈希表的做法,具体思路以注释的形式放在代码中,非常好理解。

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //字母异位词:字母内容相同但是顺序不同
        //哈希表记录答案
        //新建哈希表
        Map<String,List<String>> map = new HashMap<>();
        //遍历字符串数组
        for(String str:strs){
            //取每个字符串进行排序和与哈希表比较
            char[] s = str.toCharArray();
            Arrays.sort(s);
            //排序后与哈希表比对
            if(map.containsKey(new String(s))){
                //若是原先就有排序后的字符串,那么之间取来值,将原字符串添加到哈希表中
                map.get(new String(s)).add(str);
            }else{
                //若是map中没有对应的键和值,那么新建一个list将其放入
                List<String> temp = new ArrayList<>();
                temp.add(str);
                map.put(new String(s),temp);//键是排序后的字符串,值是原来的字符串组成的列表
            }
        }
        return new ArrayList<>(map.values());//map的列表值的列表
    }
}
相关推荐
SilentSamsara17 小时前
生成器完全指南:`yield` 与惰性求值的工程价值
linux·开发语言·python·算法·机器学习·青少年编程
玛卡巴卡ldf17 小时前
【LeetCode 手撕算法】(二分查找)搜索插入位置、搜索二维矩阵、查找数组相同的所有位置、搜索旋转排序数组、旋转升序数组的最小值
数据结构·算法·leetcode
谷雨不太卷1 天前
进程的状态码
java·前端·算法
散峰而望1 天前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
躺不平的理查德1 天前
时间复杂度与空间复杂度备忘录
数据结构·算法
yaki_ya1 天前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法
刃神太酷啦1 天前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
挽星安1 天前
代码随想录算法训练营第五十天|卡码网 99 岛屿数量、卡码网 100 最大岛屿的面积
算法
葫三生1 天前
《论三生原理》系列构建文理同构的认知体系?
人工智能·科技·深度学习·算法·机器学习·transformer
.NET修仙日记1 天前
2026 .NET 面试八股文:高频题 + 答案 + 原理(面试加分技巧)
面试·职场和发展·.net·.net core·微软技术