题目
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:
输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:
输入:ransomNote = “aa”, magazine = “aab”
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 10^5
ransomNote 和 magazine 由小写英文字母组成
来源:力扣(LeetCode)
解题思路
题目如果成立,首先magazine的长度一定不能小于ransomNote,其次magazine中与ransomNote中对应字符的频率前者要大于等于后者才行,但是也会存在前者长度较大但是里面没有前者的一些字符,这样也无法成立。总而言之,关键是需要统计字符的频率。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:d1={}d2={}for i in ransomNote: #频率统计d1[i]=d1.get(i,0)+1for i in magazine:d2[i]=d2.get(i,0)+1for i in d1.keys(): try: #尝试访问magazine中对应字符的频率,如果访问不到便是magazine中没有对应的字符if d2[i]<d1[i]: #如果magazine中对应字符没有足够的频率也不能成立return Falseexcept:return Falsereturn True