1. 程式人生 > >LeetCode刷題之383Python贖金信

LeetCode刷題之383Python贖金信

題目:

給定一個贖金信 (ransom) 字串和一個雜誌(magazine)字串,判斷第一個字串ransom能不能由第二個字串magazines裡面的字元構成。如果可以構成,返回 true ;否則返回 false。

(題目說明:為了不暴露贖金信字跡,要從雜誌上搜索各個需要的字母,組成單詞來表達意思。)

注意:

你可以假設兩個字串均只含有小寫字母。

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true

我的解答:

和題350兩個陣列的交集II的思路一樣。先求出不重複元素集,再看贖金中的字元是否在雜誌中且兩者數目相等。

class Solution(object):
    def canConstruct(self, ransomNote, magazine):
        """
        :type ransomNote: str
        :type magazine: str
        :rtype: bool
        """
        if ransomNote == magazine:
            return True
        elif magazine == '':
            return False
        elif ransomNote == '' :
            return True
        
        r = set(ransomNote)
        m = set(magazine)
        for i in r:
            if i not in m:
                return False
        for i in r:
            c1 = ransomNote.count(i)
            c2 = magazine.count(i)
            if c1 > c2:
                return False
        return True