49. 字母异位词分组

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

所有的字母异位词,排序后一致,可看成哈希表的键

这个题昨天晚上尝试解了半个小时,只完成了80%的用例。关键是怎么判断字母异位词,当时我对这个问题理解的有偏差。我当时的思路是,一个字符串中的每个字符,在另一个字符串中都存在,这只是字母异位词的必要条件,不充分(20%例子不过)。只有排序后完全一致的两个字符串,才是字母异位词,这是充要条件。

炫技的操作并没必要,Python collection defaultdict 类似语法糖操作,就是在字典里增加新的键时会有默认初值,效率比自己写判断逻辑要高10%。

参考资料:

defaultdict
defaultdict是内置数据类型dict的一个子类,基本功能与dict一样,
只是重写了一个方法missing(key)和增加了一个可写的对象变量default_factory。
default_factory, 这个属性用于missing()方法,使用构造器中的第一个参数初始化;
使用list作为default_factory,很容易将一个key-value的序列转换为一个关于list的词典;

>>> from collections import *
>>> s = [('yellow',1),('blue',2),('yellow',3),('blue',4),('red',5)]
>>> d = defaultdict(list)
>>> for k,v in s: d[k].append(v)
... 
>>> d.items()
[('blue', [2, 4]), ('red', [5]), ('yellow', [1, 3])]

当每一个key第一次遇到时,还没有准备映射,首先会使用default_factory函数自动创建一个空的list,
list.append()操作将value添加至新的list中,当key再次遇到时,通过查表,
返回对应这个key的list,list.append()会将新的value添加至list,这个技术要比dict.setdefault()要简单和快速。

>>> s = "mississippi"
>>> d = defaultdict(int)
>>> for k in s: d[k]+=1
... 
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
————————————————
版权声明:本文为CSDN博主「专职」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42289273/article/details/129924242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值