【12月打卡~Leetcode每日一题】49. 字母异位词分组(难度:中等)

49. 字母异位词分组

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

思路:异位词在排序后的结果一定是一致的,因此可以根据排序结果存入hash表,遍历hash表得到结果

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = collections.defaultdict(list)

        for st in strs:
            dic["".join(sorted(st))].append(st)
        
        return list(dic.values())

时间复杂度O(nklogn),n为单词平均长度,k为单词个数

还有个比较好的思路是用质数,因为两个质数相乘,他的值是独一无二的,因此可以用质数给词编码,同码的词一定是异位词。
但是会有个问题就是,如果词的值比较大,会带来溢出的情况,而如果使用取模减少溢出影响又会出错
不过是一个很好的思路

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        a = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97]
        dic = {chr(ord("a")+i):a[i] for i in range(26)}
        ans_dic = collections.defaultdict(list)

        for st in strs:
            ans = 1
            for i in st:
                ans *= dic[i]
            ans_dic[ans].append(st)
        
        return list(ans_dic.values())

通过样例111/112,在最后一个样例上应该有溢出错误

你可能感兴趣的:(模拟/遍历,字符串,数据结构,哈希,hash)