数据结构与算法之 leetcode 哈希表字母异位词分组 频率数组分组

数据结构与算法阿木 发布于 2025-07-12 6 次阅读


摘要:

在LeetCode中,字母异位词分组问题是一个经典的哈希表应用场景。本文将围绕这一主题,深入探讨如何使用频率数组分组策略解决字母异位词分组问题,并详细解析相关代码实现。

一、问题背景

字母异位词是指由相同的字母组成,但排列顺序不同的单词。例如,"eat"和"tea"就是一组字母异位词。给定一个字符串数组,我们需要将这些字母异位词分组,使得每组中的单词都是由相同的字母组成。

二、解决方案

为了解决这个问题,我们可以采用以下步骤:

1. 遍历字符串数组,对每个字符串进行排序,得到排序后的字符串。

2. 使用一个哈希表(字典)来存储排序后的字符串作为键,对应的值是一个列表,用于存储所有具有相同排序结果的字符串。

3. 遍历哈希表,将具有相同排序结果的字符串分组。

三、代码实现

下面是使用Python语言实现的代码示例:

python

def groupAnagrams(strs):


创建一个空字典用于存储分组结果


result = {}



遍历字符串数组


for s in strs:


对字符串进行排序


sorted_s = ''.join(sorted(s))



如果排序后的字符串已经在字典中,则将其添加到对应的列表中


if sorted_s in result:


result[sorted_s].append(s)


else:


否则,创建一个新的列表并添加当前字符串


result[sorted_s] = [s]



返回分组结果


return list(result.values())

测试代码


strs = ["eat", "tea", "tan", "ate", "nat", "bat"]


print(groupAnagrams(strs))


四、代码解析

1. `groupAnagrams` 函数接收一个字符串数组 `strs` 作为输入。

2. 创建一个空字典 `result` 用于存储分组结果。

3. 遍历字符串数组 `strs`,对每个字符串 `s` 进行排序,得到排序后的字符串 `sorted_s`。

4. 如果 `sorted_s` 已经在字典 `result` 中,则将其添加到对应的列表中。否则,创建一个新的列表并添加当前字符串。

5. 将字典 `result` 的值转换为列表并返回。

五、时间复杂度和空间复杂度分析

1. 时间复杂度:对于每个字符串,排序的时间复杂度为 O(nlogn),其中 n 是字符串的长度。由于需要遍历所有字符串,因此总的时间复杂度为 O(n m logm),其中 m 是字符串数组的长度。

2. 空间复杂度:哈希表 `result` 的空间复杂度为 O(n),其中 n 是字符串数组的长度。

六、总结

本文深入解析了LeetCode中的字母异位词分组问题,并详细介绍了基于频率数组分组策略的代码实现。通过分析代码,我们可以了解到如何使用哈希表对字母异位词进行分组,以及如何优化算法的时间复杂度和空间复杂度。希望本文对您在解决类似问题时有所帮助。