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
相关产品推荐
相关产品推荐

