散列表解决字母异位词分组的核心是设计统一键:排序字符串或26维频次数组(转为不可变形式)作key,确保异位词映射同一key;哈希表以O(1)平均时间完成特征到分组的映射,避免两两比较,实现高效聚类。

散列表(哈希表)解决字母异位词分组,核心在于设计一个能将互为异位词的字符串映射到同一键(key)的规则。只要键相同,它们就会被归入同一个分组,天然适配分组需求。
用排序后字符串作键
互为字母异位词的字符串,字符组成完全相同——排序后必然得到完全一致的字符串。这个排序结果就是天然的、稳定的分组标识。
- 遍历每个字符串,转成字符数组并排序,再拼回字符串
- 把这个排序串作为哈希表的 key,value 是存放所有原始字符串的列表
- 遇到已有 key,直接追加;没有则新建列表再放入
- 最后把哈希表所有 value(即所有分组列表)汇总返回
用字符频次数组作键
当字符串只含小写字母时,可构造长度为26的整型数组,索引0~25对应a~z,值表示该字母出现次数。这个数组能唯一刻画字符串的字符构成。
- 对每个字符串,遍历字符,计算 char - 'a' 得到下标,对应位置+1
- 将这个26维数组转成不可变形式(如用逗号拼接的字符串,或 Python 中的 tuple)作为 key
- 后续逻辑同上:按 key 归集原始字符串
- 此法避免排序开销,时间复杂度更稳定,尤其适合长字符串
为什么散列表在这里特别合适
分组本质是“按特征聚类”,而散列表擅长以 O(1) 平均时间完成“特征 → 分组”的映射与查找。每来一个新字符串,只需算一次 key、查一次表、塞一次值,无需两两比对,也不依赖顺序。
- 相比暴力法(O(n² × m log m)),散列表将时间压到 O(n × m log m) 或 O(n × m)
- 空间换时间:额外存储 key 和分组列表,但换来的是线性处理能力
- 两种 key 设计都保证了“异位词必同键、非异位词大概率不同键”,无漏分、无错合


















