题目:
给你两个字符串: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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
from collections import Counter
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine):
return False
return not Counter(ransomNote)-Counter(magazine)
Counter是一个简单的计数器,例如,统计字符出现的个数
Counter实际上也是dict的一个子类,下面的结果可以看出每个字符出现的次数
>>> from collections import Counter >>> c = Counter() >>> for ch in 'programming': ... c[ch] = c[ch] + 1 ... >>> c Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1}) >>> c.update('hello') # 也可以一次性update >>> c Counter({'r': 2, 'o': 2, 'g': 2, 'm': 2, 'l': 2, 'p': 1, 'a': 1, 'i': 1, 'n': 1, 'h': 1, 'e': 1})
因为用于统计元素出现次数的Counter是可以相减的。
如
a = 'aabccc'
b = 'aabcc'
print(Counter(a) - Counter(b))
输出Counter({'c': 1})
所以我们可以直接使用
Counter(ransomNote) - Counter(magazine)
如果ransomNote中个字符s出现的次数都大于magazine中每个字符s出现的次数。则Counter(ransomNote) - Counter(magazine)的结果为Counter()
如
a = 'abc'
b = 'aabcc'
print(Counter(a) - Counter(b))
输出Counter()
————————————————
版权声明:本模块部分为CSDN博主「亖夕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_61791601/article/details/124641321