每日leetcode-陣列-383. 贖金信
阿新 • • 發佈:2021-06-25
分類:字串-字元的統計
題目描述:
給定一個贖金信 (ransom) 字串和一個雜誌(magazine)字串,判斷第一個字串 ransom 能不能由第二個字串 magazines 裡面的字元構成。如果可以構成,返回 true ;否則返回 false。
(題目說明:為了不暴露贖金信字跡,要從雜誌上搜索各個需要的字母,組成單詞來表達意思。雜誌字串中的每個字元只能在贖金信字串中使用一次。)
解題思路:
對magazines中的字元進行遍歷,相同字母個數加一寫進字典,再對ransom中的字元進行遍歷,依次減1 如果出現不在字典中的字母或者有字母個數出現-1,則返回false ,否則,返回true
classSolution: 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 Falseelse: 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 inransomNote: a[j] -= 1 if a[j] < 0: return False return True