weekly contest 416。
印象中第一次出現中等的 Q1,但根本不如普通的簡單題。

題目

輸入字串陣列 message 還有 bannedWords

如果 message 中有至少兩個單字在 bannedWords 中出現,則視作垃圾訊息

若 message 是垃圾訊息回傳 true;否則回傳 false。

解法

仔細看一下測資,bannedWords 長度高達 10^5,一定要用集合做。這可能是中等的原因。
把 bannedWords 轉成集合,再算 message 中有幾個禁止字,根據數量回傳答案。

時間複雜度 O(M + N),其中 M = len(message),N = len(bannedWords)。
空間複雜度 O(N)。

class Solution:
    def reportSpam(self, message: List[str], bannedWords: List[str]) -> bool:
        s = set(bannedWords)
        return len(1 for x in message if x in s) >= 2