49. Group Anagrams解法对比--python版

原题
第一种想法是写一个能够判断两个字符串是否是相互颠倒顺序而成的,但是当列表长度很大时会导致时间超过限制,所以被否决。
第二种想法将字符串提取出来,对其字母排序,然后采用字典中键值的方式来进行添加。排序后的结果作为键,原始的字符串作为值,具有相同键的字符串会被添加到同一个值里面。

class Solution:
    def groupAnagrams(self, strs: 'List[str]') -> 'List[List[str]]':
        strs_ = {}
        for i in range(len(strs)):
            key = ''.join(sorted(strs[i]))
            if strs_.__contains__(key)==False:
                strs_[key] = []
            strs_[key].append(strs[i])
        return list(strs_.values())

这里也将第一种方法的代码贴出,虽然没有通过,但希望有小伙伴能用这种方式给个更好地解法。

class Solution:
    def groupAnagrams(self, strs: 'List[str]') -> 'List[List[str]]':
        res_L = []
        for v in strs:
            flag = False
            for res in res_L:
                if Solution.is_same(res[0], v):
                    res.append(v)
                    flag = True
                    break
            if flag == False:
                res_n = [v]
                res_L.append(res_n)
        return res_L

    def is_same(s1, s2):
        if len(s1) != len(s2):
            return False
        seen1 = set()
        seen2 = set()

        for i in s1:
            seen1.add(i)
        for i in s2:
            seen2.add(i)
        if seen1 != seen2:
            return False
        for l in list(seen1):
            if s1.count(l) != s2.count(l):
                return False
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值