49.字母异位词分组

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

示例 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"]


思路:

题目要将字母异位词 组合在一起说明字母异位词 一定有他们的共性

  • 字母异位词的每个词组的异位词经过ASCLL码排序后一定是一样的词组
  • 字母异位词的每个字母出现的次数是一样的

按照第一种共性我们就可以遍历每个字母异位词,先经过排序(作为key),然后将相同的key的字母异位词放入同一个集合即可

复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
       HashMap<String, List<String>> hashMap = new HashMap<>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String key = new String(charArray);
            if (!hashMap.containsKey(key)) {
                ArrayList<String> strings = new ArrayList<>();
                strings.add(str);
                hashMap.put(key, strings);
            } else {
                List<String> strings = hashMap.get(key);
                strings.add(str);
                hashMap.put(key, strings);
            }
        }
        return new ArrayList<>(hashMap.values());
    }
} 

相关推荐
驭渊的小故事19 分钟前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang20 分钟前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
白杨尚青37 分钟前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
vipxieliang40 分钟前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路40 分钟前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试
.道阻且长.44 分钟前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
Rainmicro1 小时前
【无标题】
java·数据库·算法
starzy19901 小时前
深入理解Scala匿名函数:函数式编程基石
开发语言·scala
驭渊的小故事1 小时前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring
天天被压力2 小时前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python