LeetCode383赎金信
# coding:utf-8 """ Name : LeetCode383.py Author : qlb Contect : 17801044486@163.com Time : 2021/2/6 9:32 Desc:赎金信 """ # 解题思路 和四数相加思路类似 # 1分为两部分 将两个字符串分别按照 key(字符) value(字符出现的次数)存储在两个哈希表中 # 2 遍历 保存ransomNote的哈希表 ransomNote每个字符出现的次数小于等于该字符在magazine中出现的次数即可 #Solution1 原始写法 import collections class Solution1: def canConstruct(self, ransomNote: str, magazine: str) -> bool: bigDic = {} smallDic = {} for s1 in magazine: if s1 in bigDic: bigDic[s1] += 1 else: bigDic[s1] = 1 for s2 in ransomNote: if s2 in smallDic: smallDic[s2] += 1 else: smallDic[s2] = 1 boolCount = 0 for k,v in smallDic.items(): if k in bigDic: if v <= bigDic[k]: boolCount += 1 if boolCount == len(smallDic): return True else: return False # Solution2 效率更高的写法 class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: bigDic = collections.Counter(magazine) smallDic = collections.Counter(ransomNote) for k,v in smallDic.items(): if bigDic.get(k,-1) < v: return False return True