【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的列表值的列表
    }
}
相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark3 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法