题目:
给你一个字符串数组,请你将字母异位词 组合在一起。可以按任意顺序返回结果列表。
示例 1:
输入:strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:[["bat"],["nat","tan"],["ate","eat","tea"]]
解释:
- 在 strs 中没有字符串可以通过重新排列来形成
"bat"。 - 字符串
"nat"和"tan"是字母异位词,因为它们可以重新排列以形成彼此。 - 字符串
"ate","eat"和"tea"是字母异位词,因为它们可以重新排列以形成彼此。
示例 2:
输入:strs = [""]
输出:[[""]]
示例 3:
输入:strs = ["a"]
输出:[["a"]]
提示:
1 <= strs.length <= 1040 <= strs[i].length <= 100strs[i]仅包含小写字母
我的代码:
其实这道题我都没做出来,思考了接近一个小时,一直卡着,没办法,就把思路给AI讲了,AI写的:
class Solution: def groupAnagrams(self, strs: list[str]) -> list[list[str]]: groups = {} for word in strs: key = ''.join(sorted(word)) if key not in groups: groups[key] = [] groups[key].append(word) return list(groups.values())这里的原理其实是哈希表,哈希表是一种通过键(Key) 直接访问值(Value) 的数据结构。它的核心思想是:通过哈希函数将键映射到数组的特定位置,从而实现快速访问。
在这里就表现为:把每一个元素比如eat、tea、ate转换成一样的编号key比如aet(就是按字母顺序排列),然后通过aet这个编号实现快速存取value。
优秀代码
class Solution: def groupAnagrams(self, strs: list[str]) -> list[list[str]]: mp = collections.defaultdict(list) for st in strs: key = ''.join(sorted(st)) mp[key].append(st) return list(mp.values())其中mp = collections.defaultdict(list) 这句代码中的 collections 是 Python 自带的一个工具模块,defaultdict 是里面提供的一种特殊字典。list 就是 Python 里的列表类型本身,这里把它传进去,意思是:"当碰到不存在的 key 时,请用 list() 来自动创建一个默认值。"