【LeetCode】49. 字母异位词分组(Java自用版)

排序法:

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] array = str.toCharArray();
            Arrays.sort(array);
            String key = new String(array);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

上面的Java代码定义了一个Solution类,其中包含一个名为groupAnagrams的公共方法。这个方法的目标是将一个字符串数组strs中的字符串按照它们的字母顺序(即它们的字母异位词)进行分组。

以下是对代码的详细分析:

  1. 初始化

    • 首先,代码初始化了一个HashMap,键是排序后的字符串(作为字母异位词的标识),值是一个字符串列表,包含所有与该键匹配的原始字符串。
java 复制代码
Map<String, List<String>> map = new HashMap<String, List<String>>();
  1. 遍历字符串数组

    • 对于strs数组中的每个字符串str,代码执行以下操作:
java 复制代码
for (String str : strs) {
  1. 转换并排序字符串

    • 将字符串转换为字符数组。
    • 使用Arrays.sort方法对字符数组进行排序。
    • 使用排序后的字符数组创建一个新的字符串key,该字符串将作为HashMap的键。
java 复制代码
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String(array);
  1. 获取或创建列表

    • 使用map.getOrDefault方法尝试从HashMap中获取与key关联的列表。
    • 如果key不存在,则使用new ArrayList<String>()创建一个新的空列表。
java 复制代码
List<String> list = map.getOrDefault(key, new ArrayList<String>());
  1. 添加字符串到列表

    • 将原始的未排序的字符串str添加到获取到的列表list中。
java 复制代码
list.add(str);
  1. 更新HashMap

    • 使用map.put方法将更新后的列表(现在包含了一个新的字符串)与key关联起来。
java 复制代码
map.put(key, list);
  1. 返回结果

    • 最后,代码从HashMap中获取所有的值(即所有分组后的字符串列表),并将它们放入一个新的ArrayList中,然后返回这个ArrayList
java 复制代码
return new ArrayList<List<String>>(map.values());

总结

这个groupAnagrams方法的核心思想是将字符串转换为它们的字母顺序形式,然后使用这些排序后的字符串作为键来将原始字符串分组。由于字母异位词在排序后将具有相同的字符串表示形式,因此它们将被分组到同一个列表中。这种方法可以有效地将字母异位词分组,并且对于较大的输入数据集也能保持良好的性能。

相关推荐
VaporGas9 分钟前
Spring-bean实例化的方式
java·数据库·spring
了无痕131413 分钟前
8-回溯算法
算法
R_1878191153414 分钟前
电商系统之链动2+1模式开发
java·大数据·intellij-idea
john_hjy21 分钟前
4. 数据结构: 对象和数组
java·开发语言·前端
代码吐槽菌25 分钟前
基于SSM的校园自助洗衣系统【附源码】
java·数据库·毕业设计·ssm·计算机专业
问道飞鱼25 分钟前
每日学习一个数据结构-堆
数据结构·学习·算法
BYSJMG28 分钟前
基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】
java·开发语言·spring boot·微信小程序·小程序·课程设计·毕设
沙漏无语1 小时前
idea插件通义灵码
java·ide·intellij-idea
ad_l1 小时前
代码随想录_刷题记录_第四次
笔记·算法·leetcode
cdut_suye1 小时前
STL之list篇(上)初识list容器,了解其核心机制,实例化对象进行分析
开发语言·c++·学习·算法·stl·list