字母异位词分组

博客探讨了如何通过优化算法解决LeetCode第49题,即字母异位词分组问题。博主首先分享了原始的字典计数器实现,虽然能解决问题但效率较低,然后展示了利用Python内置函数和字典数据结构的高效解决方案,大大减少了时间和空间复杂度。这种方法将字符串排序后作为字典的键,从而快速找到字母异位词的对应分组。
摘要由CSDN通过智能技术生成

字母异位词分组

Leetcode第49题
在这里插入图片描述
下面是菜菜的想法与实现,采用了字典计数器来实现,比较费时间和内存吧(emmm)

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        if strs==[]:return []
        res = []   # 输出结果
        count = []   #计数器
        for k in range(len(strs)):
            
            #---生成单个字符的字典计数
            dict_={}
            for i in strs[k]:
                dict_.setdefault(i,0)
                dict_[i]+=1
            
            #第一个字符串
            if k == 0:
                count.append(dict_)
                res.append([strs[k]])
                continue
            
            #---判断该计数器是否在已有的序列中
            for i,key in enumerate (count):
                if key == dict_:
                    res[i].append(strs[k])
                    break
                if i == len(count)-1:
                    count.append(dict_)
                    res.append([strs[k]])
                    break
        return res

下面是他人比较好的利用内置函数及数据结构实现的算法,只能说菜菜的只能是初阶段位于怎么理解解题不适合应用,来看看大佬们如何实现的

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dict = {}
        for item in strs:
            key = tuple(sorted(item))
            dict[key] = dict.get(key, []) + [item]
        return list(dict.values())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值