LeetCodehot100刷题笔记
49.字母异位词分组 (中等难度)tag:哈希表
Q:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
题目分析:
题目描述的难以理解。。。。。。其实,就是找出由相同字母组成的单词,每种字母的个数也相同。[“nat”,“tan”]都由a t n这三个字母组成,[“ate”,“eat”,“tea”]都由a e t这三个字母组成。
解答:
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
##self这是 Python 类方法的第一个参数,表示调用这个方法的实例对象。它在类方法中是必须的,表示当前对象的引用。
##表示该方法接收一个参数strs,该参数的注解为List[str]表示一个列表中每个元素都是字符串类型。
##-> List[List[str]]:这是函数返回值的类型注解,表示这个函数将返回一个包含多个字符串列表的列表。换句话说,返回的值是一个列表,其中的每个元素又是一个字符串列表。
类型注解在 Python 3.5 引入并在后续版本中得到增强。如果你学习的是早期的 Python 版本,可能没有接触过类型注解。这些注解是可选的,Python 仍然保持动态类型的特性,但它们对大规模项目或团队合作有很大帮助。
collections 模块
collections 是 Python 的标准库模块,提供了几种额外的数据类型,比内置的字典、列表、集合等更加灵活和强大。这些数据类型包括 namedtuple、deque、Counter、OrderedDict 和 defaultdict 等。
defaultdict 类
defaultdict 是 collections 模块中的一个字典子类,与普通字典类似,但在你尝试访问一个不存在的键时,它不会引发 KeyError。相反,它会自动为这个键生成一个默认值。
示例:
import collections
# 创建一个 defaultdict,默认值是空列表
mp = collections.defaultdict(list)
# 尝试访问不存在的键 "a"
print(mp["a"]) # 输出: []
# 向字典中添加数据
mp["a"].append(1)
mp["a"].append(2)
# 打印字典
print(mp) # 输出: defaultdict(<class 'list'>, {'a': [1, 2]})
在这个例子中,mp[“a”] 最初是空的,因为 mp 是一个 defaultdict,当键 “a” 不存在时,它自动创建一个空列表作为默认值。然后,我们可以直接向这个列表中添加元素,而不需要担心 KeyError。
for st in strs:
key = "".join(sorted(st))
mp[key].append(st)
return list(mp.values())
下面遍历列表strs中的元素,sorted(st) 会将字符串中的字符按字母顺序排序,并返回一个包含这些字符的列表。例如:sorted(“eat”) 会返回 [‘a’, ‘e’, ‘t’]。
join() 方法将一个列表中的元素连接成一个字符串,并将其赋值给字典中的键值。" " 表示使用空字符串,意味着在连接字符时不添加任何额外的字符作为分隔符。。将字符列表 [‘a’, ‘e’, ‘t’] 连接成 “aet”,其中没有任何分隔符。
mp的默认值是一个空列表,key 是通过对 st 排序后得到的字符串。这样,所有字母异位词(即字符相同但顺序不同的字符串)都会有相同的 key,因此它们会被归入同一个列表中。
list(mp.values()) 将这个视图转换为一个列表,最终返回这些分组好的字母异位词。
完整的解题代码如下:
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())