给你一个字符串数组 message
和一个字符串数组 bannedWords
。
如果数组中 至少 存在两个单词与 bannedWords
中的任一单词 完全相同,则该数组被视为 垃圾信息。
如果数组 message
是垃圾信息,则返回 true
;否则返回 false
。
示例 1:
输入: message = ["hello","world","leetcode"], bannedWords = ["world","hello"]
输出: true
解释:
数组 message
中的 "hello"
和 "world"
都出现在数组 bannedWords
中。
示例 2:
输入: message = ["hello","programming","fun"], bannedWords = ["world","programming","leetcode"]
输出: false
解释:
数组 message
中只有一个单词("programming"
)出现在数组 bannedWords
中。
提示:
1 <= message.length, bannedWords.length <= 105
1 <= message[i].length, bannedWords[i].length <= 15
message[i]
和bannedWords[i]
都只由小写英文字母组成。
python代码
class Solution:
def isSpam(self, message: List[str], bannedWords: List[str]) -> bool:
# 将 bannedWords 转为集合以便快速查找
banned_set = set(bannedWords)
# 计数器,用来统计出现的禁用词数量
count = 0
# 遍历 message 数组,统计出现在 banned_set 中的单词
for word in message: # word 在这里逐一表示 message 中的每个单词
if word in banned_set:
count += 1
# 如果找到至少两个单词,立即返回 True
if count >= 2:
return True
# 如果少于两个单词出现在 banned_set 中,返回 False
return False
将 bannedWords 转为集合以便快速查找,是因为集合使用了哈希表,而哈希表的查找时间复杂度为O(1),而列表的查找平均时间为O(n),且随着列表元素增加而变慢。