欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > LeetCode383 赎金信 - Python中Counter在加减法和比较时的使用

LeetCode383 赎金信 - Python中Counter在加减法和比较时的使用

2024/10/23 23:34:02 来源:https://blog.csdn.net/Catalany/article/details/143057781  浏览:    关键词:LeetCode383 赎金信 - Python中Counter在加减法和比较时的使用

在LeetCode上做了 383. 赎金信(一道简单hash题)之后,翻看官方题解时发现用了 Counter 类:

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:if len(ransomNote) > len(magazine):return Falsereturn not collections.Counter(ransomNote) - collections.Counter(magazine)

查看定义可知:Counter 是 collections 模块的一个类,用于统计可哈希对象的出现次数。它的实例可以看作是一个字典,其中键是元素,值是元素的计数。

关于Counter的详细介绍我参考的这篇博客:Python collections模块之Counter()详解

这里介绍一下 Counter 的比较规则:

  1. 相加:两个 Counter 实例相加时,会将相同键的值相加,生成一个新的 Counter,其中包含所有键及其总计数。

    from collections import Counterc1 = Counter('abc')
    c2 = Counter('aab')
    result = c1 + c2
    # result: Counter({'a': 3, 'b': 2, 'c': 1})
    
  2. 相减 (-):两个 Counter 实例相减时,会将相同键的值相减,但如果某个键的结果为负数,则该键会被移除。

    例如:

    from collections import Counterc1 = Counter('aab')
    c2 = Counter('aabb')
    result = c1 - c2
    # result: Counter()
    
  3. 做比较Counter(a) <= Counter(b) 会检查 Counter(a) 中的每个元素,确保它的计数不大于 Counter(b) 中的对应元素的计数,如果满足返回True,否则返回False。也可以看作减法,如果 Counter(a) - Counter(b) 得到的 Counter 为空的(即False),那么原不等式成立。

回到官方题解的代码,首先判断二者长度,如果 len(ransomNote) > len(magazine) 直接返回 False ,然后比较 Counter(ransomNote) - Counter(magazine),注意这里要加一个 not,因为 Counter 减法结果 False 表示的才是正确,返回 True

往下翻阅其他人的题解,也发现了用不等式实现的:

class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:return Counter(ransomNote) <= Counter(magazine)

注:LeetCode平台会自动导入常用的库,如 collections 模块。所以不需要显式地写 import Counter

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com