1. 字母异位词分组问题解析
最近在刷LeetCode热题100时遇到了第49题"字母异位词分组",这是一道中等难度的字符串处理题目。题目要求给定一个字符串数组,将字母异位词组合在一起。字母异位词指的是字母相同但排列不同的字符串,比如"eat"、"tea"、"ate"就是一组字母异位词。
这道题看似简单,但实际解决起来有几个关键点需要考虑:
- 如何判断两个字符串是字母异位词?
- 如何高效地将所有字母异位词分组?
- Python中有哪些内置函数可以简化这个过程?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路与算法选择
2.1 暴力解法分析
最直观的解法是双重循环遍历所有字符串,对每一对字符串进行比较,判断它们是否是字母异位词。判断方法可以是:
- 比较排序后的字符串是否相同
- 或者统计每个字母出现的次数是否相同
但这种解法的时间复杂度是O(n²k),其中n是字符串数量,k是字符串平均长度,对于大规模数据效率太低。
2.2 哈希表优化方案
更高效的解法是使用哈希表(在Python中是字典)来存储分组。具体思路是:
- 对每个字符串进行排序,排序后的字符串作为哈希表的键
- 原始字符串作为值存储在对应键的列表中
- 最后返回哈希表中所有的值列表
这种方法的时间复杂度是O(nklogk),主要开销在于对每个字符串进行排序。
3. Python实现详解
3.1 完整代码实现
python复制import collections
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
mp = collections.defaultdict(list)
for s in strs:
key = "".join(sorted(s))
mp[key].append(s)
return list(mp.values())
3.2 关键代码解析
- `collections.de
