49. 字母异位词分组

type
status
date
slug
summary
tags
category
difficulty
icon
password

49. 字母异位词分组

题目描述

给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词是由重新排列源单词的所有字母得到的一个新单词。

示例

示例 1:
示例 2:
示例 3:

提示

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

解决方案

解题思路

这道题目要求我们将所有字母异位词组合在一起。字母异位词是指两个字符串中的字母出现次数完全相同,只是排列顺序不同。

方法:排序 + 哈希表

核心思路是:将每个字符串排序后作为哈希表的键,原字符串作为值存储。这样所有的字母异位词排序后都会得到相同的字符串,从而被分到同一组。

实现步骤

  1. 遍历输入的字符串数组 strs
  1. 对于每个字符串,创建其副本并对字符进行排序
  1. 使用排序后的字符串作为哈希表的键,将原字符串加入对应的值数组中
  1. 最后遍历哈希表,将所有值数组加入结果集

复杂度分析

时间复杂度:
  • 遍历字符串数组需要 O(n) 的时间
  • 对每个字符串排序需要 O(klogk) 的时间
  • 总时间复杂度为 O(n * klogk)
空间复杂度:
需要一个哈希表来存储所有字符串,空间复杂度为 O(n * k)

代码详解

  1. 使用 unordered_map 存储排序后的字符串到原字符串数组的映射:
  1. 遍历每个字符串,将其排序后作为键存储:
  1. 将哈希表中的所有值数组收集到结果数组中:
这种解法的优点是思路直观,实现简单。主要的时间消耗在字符串排序上。如果字符串长度较大,可以考虑使用计数方法来代替排序,即统计每个字符的出现次数作为哈希表的键。
 
上一篇
Redis使用最佳实践
下一篇
两数之和

评论
Loading...