刷题的一点小发现--这两个Counter相等吗

文章讨论了在不同Python版本中,使用Counter处理异位词的问题,发现Python3.9和Python3.10对于元素计数为0的处理方式不同,影响了结果。同时,文章也提到了最长递增子序列题目的时间复杂度问题,以及在不同平台上的性能差异。作者还表达了对高赞题解的惊叹,感慨智商差距。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

找到字符串中的异位词,牛客NC387,力扣438,以下代码执行结果不同。

from collections import Counter
class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        n, m, res = len(s), len(p), []
        if n < m: return res
        countp = Counter(p)
        counts = Counter(s[:m])
        if counts == countp:
            res.append(0)

        for i in range(m, n):
            counts[s[i - m]] -= 1
            counts[s[i]] += 1
            if counts == countp:
                res.append(i - m + 1)

        c1 = Counter({'a': 1, 'b': 1})
        c2 = Counter({'a': 1, 'b': 1, 'c': 0})
        print(c1 == c2)
        return res

用例"cbaebabacd","abc",牛客运行结果:[0],False,力扣运行结果:[0,6],True。

原因:牛客用的Python3.9版本,力扣用的Python3.10版本,本地安装的Python3.8,与牛客运行结果一致,切换到Python3.10,跟力扣运行结果一致。Counter本质是个计数器,c元素出现0次,跟没出现效果一样,所以个人认为Python3.10的结果更合理一些。

ps:最长递增子序列题目,一样的代码,时间复杂度都是O(N*2),为啥牛客的执行时间在200ms以下,而力扣的执行时间在2500ms以上呢?有知道原因的麻烦告知一下,感谢。

pps:有些题目呦,自己只能想到最简单解法,一看最高赞题解,不由得瞪大眼睛连呼我X,感叹人和人的智商能有这么大差距。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值