力扣(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