赎金信

题目链接

为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。

给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。

如果可以构成,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例:

输入:ransomNote = "a", magazine = "b"
输出:false

思路

解题关键:magazine中的每个英文字母 ('a'-'z')的统计次数都大于等于ransomNote中相同字母的统计次数即可

  • 字符串ransomNote的长度应该大于magazine的长度
  • 统计两个字符每个英文字母的次数,ransomNote每个字符的次数大于magazine中的次数

解法一:

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