赎金信
概述:给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。
输入:ransomNote = "a", magazine = "b"
输出:false
输入:ransomNote = "aa", magazine = "ab"
输出:false
输入:ransomNote = "aa", magazine = "aab"
输出:true
方法一:Counter() 方法
思路:用 Counter() 方法统计出每个字符串出现次数,然后判断相减是否为空即可。
# Counter() 方法
# 用 Counter() 方法统计出每个字符串出现次数,然后判断相减是否为空即可。
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine):
return False
return not collections.Counter(ransomNote) - collections.Counter(magazine)
方法二:暴力循环
思路:题目要求是 magazine 包含了 ransomNote,那么转为列表依次判断并移除即可。
# 暴力循环
# 题目要求是 magazine 包含了 ransomNote,那么转为列表依次判断并移除即可。
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
list_1 = list(ransomNote)
list_2 = list(magazine)
for i in range(len(list_2)):
if list_2[i] in list_1:
list_1.remove(list_2[i])
return len(list_1) == 0
总结
这是新手题吗,可能我是断手,看的都吃力