LeetCode 383. Ransom Note

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        if len(ransomNote) > len(magazine):
            return False
        dic = dict()
        for elm in magazine:
            if elm not in dic.keys():
                dic[elm] = 1
            else:
                dic[elm] += 1

        for elm in ransomNote:
            if elm not in dic.keys():
                return False
            else:
                dic[elm] -= 1
                if dic[elm] < 0:
                    return False
        return True

magazineの要素をkey、出現回数をvalueとして辞書dicに入れる。

ransomNoteの要素がdicにあれば、valueの値を1減らす。
0未満になったら、ransomNoteに出現する個数の方がmagazineの個数よりも多いという意味なのでFalseを返す
ransomNoteの要素がdicになければ、magazineにその要素は含まれないという意味なのでFalseを返す

elm not in dic.keys()
でelmがdicのkeyになければという意味。

Counterを使う方法もあるらしい