題目
給定一個贖金信 (ransom) 字符串和一個雜志(magazine)字符串,判斷第一個字符串ransom能不能由第二個字符串magazines里面的字符構(gòu)成。如果可以構(gòu)成,返回 true ;否則返回 false。
(題目說明:為了不暴露贖金信字跡,要從雜志上搜索各個需要的字母,組成單詞來表達(dá)意思。)
注意:
你可以假設(shè)兩個字符串均只含有小寫字母。
canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/ransom-note
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
思路
需要從雜志上找到對應(yīng)的字母拼接成信,所以雜志上對應(yīng)字母的頻率要高于隨機(jī)信。只要統(tǒng)計和判斷頻率就可以。
代碼
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
randomCounter = collections.Counter(ransomNote)
magazineCounter = collections.Counter(magazine)
for key in randomCounter:
if randomCounter.get(key,0) <= magazineCounter.get(key,0):
continue
else:
return False
return True