49. 字母异位词分组
分析
- 核心思想:
- 字母异位词在字母排序后,其排序结果是相同的。例如:
"eat"
和"tea"
排序后都为"aet"
- 因此,可以将排序后的字符串作为键,将所有字母异位词分组存储在一个哈希表中
- 步骤:
- 遍历字符串数组,对每个字符串进行排序,得到其标准形式
- 将排序后的字符串作为键,将原始字符串加入到对应的哈希表键值中
- 遍历哈希表,提取所有的值(即字母异位词组)
时间复杂度
- 排序:
- 每个字符串排序的时间复杂度为
O(klogk)
,其中k
是字符串的平均长度 - 总的排序复杂度为
O(n * klogk)
,其中 n 是字符串数组的大小
- 每个字符串排序的时间复杂度为
- 哈希表操作:
- 插入和查找操作的平均复杂度为
O(1)
- 插入和查找操作的平均复杂度为
总时间复杂度为 O(n * klogk)
空间复杂度
- 哈希表存储:需要存储排序后的字符串和对应的原始字符串列表,空间复杂度为
O(n * k)
- 额外字符串副本:排序时需要创建字符串副本,额外空间复杂度为
O(k)
总空间复杂度为 O(n * k)
C++代码
|
|