力扣LeetCode学习笔记(49题)

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())
  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值