1. 程式人生 > 其它 >每日leetcode-陣列-383. 贖金信

每日leetcode-陣列-383. 贖金信

分類:字串-字元的統計

題目描述:

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

(題目說明:為了不暴露贖金信字跡,要從雜誌上搜索各個需要的字母,組成單詞來表達意思。雜誌字串中的每個字元只能在贖金信字串中使用一次。)

解題思路:

對magazines中的字元進行遍歷,相同字母個數加一寫進字典,再對ransom中的字元進行遍歷,依次減1 如果出現不在字典中的字母或者有字母個數出現-1,則返回false ,否則,返回true

class
Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: a = {} for i in magazine: if i not in a: a[i] = 1 else: a[i] += 1 for j in ransomNote: if j not in a: return False
else: a[j] -= 1 if a[j] < 0: return False return True

時間複雜度O(n)

空間複雜度O(x) x為字元個數,小寫字母總共26個,最大為26.

用counter簡化程式碼:

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        a = Counter(magazine)
        for j in
ransomNote: a[j] -= 1 if a[j] < 0: return False return True