1. 问题背景与核心概念
字母异位词分组是算法面试中的经典问题,也是实际开发中常见的字符串处理需求。所谓字母异位词(Anagram),指的是由相同字母重新排列组合形成的不同单词,比如"eat"、"tea"、"ate"就是一组字母异位词。
这个问题在实际开发中有多种应用场景:
- 搜索引擎的拼写纠正功能
- 文本分析中的词汇归类
- 密码学中的字符排列组合验证
- 数据清洗中的相似文本识别
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题分析与解法思路
2.1 问题描述
给定一个字符串数组strs,将字母异位词组合在一起。可以按任意顺序返回结果列表。
示例:
输入:strs = ["eat","tea","tan","ate","nat","bat"]
输出:[["bat"],["nat","tan"],["ate","eat","tea"]]
2.2 关键解题思路
解决这个问题的核心在于如何高效判断两个字符串是否为字母异位词。常见的方法有:
- 排序法:将字符串排序后作为key
- 计数法:统计每个字母出现的次数作为key
- 质数乘积法:为每个字母分配一个质数,计算乘积作为key
3. 排序法实现详解
3.1 算法步骤
- 创建一个哈希表map,用于存储分组结果
- 遍历字符串数组中的每个字符串:
- 将字符串转换为字符数组并排序
- 将排序后的字符数组转回字符串作为key
- 如果key不存在于map中,则创建一个新列表
- 将原始字符串添加到对应key的列表中
- 返回map中的所有value组成的列表
3.2 Java实现代码
java复制class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (String str : strs) {
char[] chars = str.toCharArray();
Arrays.sort(chars);
Stri
