七七老师の白日梦
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

字母异位词

写作时间:2026-07-04 22:22:08

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

我遇到的问题

如何解决乱序问题

它是什么

可以快速查找的工具

常见用法

找目标数,降低复杂度

我踩过的坑

类型使用错误,忽略sort和增强型for循环使用条件

总结

学校没教哈希很伤

‍下面看看代码

import java.util.*;

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
//        创建哈希表
        Map<String, List<String>> map = new HashMap<>();
//        增强型for循环
        for (String str : strs) {
//            转换为字符数组(七七错误点:漏掉该步,导致后续错误,sort必须转换为字符数组才可以使用,而sort的从小到大排序是该方法的核心)
            char[] chars = str.toCharArray();
//            运用sort方法进行排序(七七错误点:写成Array,array没有sort方法)
            Arrays.sort(chars);
//            将排序后的字符数组转换成字符串
            String key = new String(chars);
// 如果当前键(排序后的字符序列)尚未存在于哈希表中,则初始化一个空列表
            map.putIfAbsent(key, new ArrayList<>());
// 将当前字符串归类到与其互为字母异位词的组中
            map.get(key).add(str);
        }
// 返回所有字母异位词的分组结果,每个分组包含具有相同字符组成的字符串列表
        return new ArrayList<>(map.values());

    }
}

那有没有更快的方法呢?有的

import java.util.*;

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        // 创建哈希表用于存储分组结果
        Map<String, List<String>> map = new HashMap<>();

        // 遍历输入字符串数组
        for (String str : strs) {
            // 统计每个字符的出现次数
            int[] count = new int[26];
//            通过toCharArray()方法将字符串转换为字符数组
            for (char c : str.toCharArray()) {
//                c - 'a':将字符 c 转换为相对于字母 'a' 的索引(如 'a' 对应 0,'b' 对应 1,以此类推)。
//count[c - 'a']++:对应字母的计数器加 1,以此统计每个字母在字符串中出现的次数。
                count[c - 'a']++;
            }

            // 将字符统计数组转换为字符串作为键
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 26; i++) {
//                判断当前字母的计数是否大于 0,大于 0 则将其添加到字符串中
                if (count[i] > 0) {
//                    输出字母和计数
                    sb.append('a' + i).append(count[i]);
                }
            }
//            转换为字符串
            String key = sb.toString();

            // 将当前字符串归类到与其互为字母异位词的组中
            map.putIfAbsent(key, new ArrayList<>());
            map.get(key).add(str);
        }

        // 返回所有字母异位词的分组结果
        return new ArrayList<>(map.values());
    }
}

这样子通过建链速度更快

avatar

七七老师

分享代码日常

RECOMMENDED

七七旧事:复盘并改变写博客的方式

2026-07-02 22:54:38

寻找两个正序数组的中位数:合并与二分

2026-07-08 15:56:26

轮转数组:数组轮换与添加

2026-07-09 14:55:54

Table of Contents