[LeetCode-Python版]Hot100(1/100)——49. 字母异位词分组

题目

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

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

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:
输入: strs = [“”]
输出: [[“”]]

示例 3:
输入: strs = [“a”]
输出: [[“a”]]

题目链接

思路

“nat"和"tan"排序后都是"atn”,利用这个性质,可以用一个哈希表存储,键是排序后的字符串,值是未排序的字符串
但要注意,sorted(s)之后得到的是一个数组[‘a’, ‘n’, ‘t’],数组转字符串用join函数

时空复杂度

时间复杂度:O(nklogk),klogk是排序耗费的时间,k是每个字符串的长度,n是遍历列表耗费的时间,n是列表长度
空间复杂度:O(nk)

参考代码

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        cnt = defaultdict(list)
        for i,s in enumerate(strs):
            print(sorted(s))
            cnt[''.join(sorted(s))].append(s)
        return list(cnt.values())
        
        

你可能感兴趣的:(LeetCode-Python,leetcode,python,算法)