字谜分组
2018-07-30 本文已影响0人
Houtasu
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入:["eat", "tea", "tan", "ate", "nat", "bat"],
输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
解题思路:
遇到分类为题,首先要想到python的字典,字典的键可以作为类别,值就是该类别下的数据了。这道题可以用排序后的字符串作为键,而不同的字母异位词就是值了。另外,在python字典中,可以之间使用 字典名[新的键]=新的值来添加一个新的键值对。但是不可以直接访问一个没有键名的值,会抛出异常。在本题中,我们遍历原始数组并添加到字典时,会遇到直接访问值的情况,这里可以用到collections库中的defaultdict类型,它需要一个默认参数,当遇到没有键名的情况下可以自动生成并赋予该默认值。具体可以参考下面的代码理解。
代码如下:
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
dic = collections.defaultdict(list)
for i in strs:
dic[''.join(sorted(i))].append(i)
#此时直接访问了字典的值,如果字典没有对应的键会抛出异常,所以要使用defaultdict
return list(dic.values())