字谜分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入:["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())

你可能感兴趣的:(字谜分组)