You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode 383. Ransom Note 赎金信代码运行错误,请问错误出在哪里?

代码错误点说明
  • 核心逻辑判断写反了:你需要满足magazine中每个字符的出现次数≥ransomNote中对应字符的出现次数,才符合构造条件。但你代码里的判断是if dict_magazine[char] > dict_ransomNote[char]就返回False,完全颠倒了逻辑。举个简单的测试用例:ransomNote为"a",magazine为"aab",magazine中'a'的计数是2,ransomNote中是1,按照你的代码会因为2>1直接返回False,但实际这个用例的正确结果是True。
  • 若你代码开头没有添加from collections import defaultdict导入语句,运行会直接抛出名称未定义的错误,需要先导入对应的依赖。
  • 次要优化点:最后一轮校验不需要遍历ransomNote的所有字符,直接遍历dict_ransomNote的键即可,避免同一个字符重复判断,不过这个问题不影响运行结果,仅会稍微降低执行效率。

修正后的代码

from collections import defaultdict
class Solution(object):
    def canConstruct(self, ransomNote, magazine):
        """
        :type ransomNote: str
        :type magazine: str
        :rtype: bool
        """
        if len(ransomNote) > len(magazine):
            return False
        
        dict_ransomNote = defaultdict(int)
        dict_magazine = defaultdict(int)
        
        for char in ransomNote:
            dict_ransomNote[char] += 1
        
        for char in magazine:
            dict_magazine[char] += 1
            
        # 修正判断条件
        for char in dict_ransomNote:
            if dict_magazine[char] < dict_ransomNote[char]:
                return False
            
        return True

内容的提问来源于stack exchange,提问作者coder1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:54:00