1. 字母异位词分组问题解析
字母异位词(Anagram)是指由相同字母重新排列组合形成的不同单词。比如"eat"、"tea"、"ate"就是一组字母异位词。这个问题要求我们将给定的字符串数组中的字母异位词分组归类。
1.1 问题核心难点
这个问题的关键在于如何高效判断两个字符串是否为字母异位词。最直观的方法是直接比较两个字符串排序后的结果是否相同,但这种方法的时间复杂度较高(O(nklogk),其中n是字符串数量,k是字符串平均长度)。
更高效的做法是统计每个字符串中各个字母的出现频率,然后将频率相同的字符串归为一组。这种方法的时间复杂度可以优化到O(nk)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解决方案设计与实现
2.1 哈希表+字符计数法
我们采用哈希表来存储分组结果,其中键是字母频率的某种表示形式,值是对应的字母异位词列表。
java复制class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// 结果列表
List<List<String>> ans = new ArrayList<>();
// 处理边界情况:只有一个字符串
if(strs.length == 1) {
ans.add(new ArrayList<>());
ans.get(0).add(strs[0]);
return ans;
}
// 使用HashMap存储分组结果
Map<String, List<String>> map = new HashMap<>();
for(String str : strs) {
char[] sArr = str.toCharArray();
int[] count = new int[26]; // 26个小写字母的计数数组
// 统计字符出现的频次
for(c
