可以使用 Python 来解决这个问题,具体步骤如下:
-
处理
paragraph
,去掉标点符号并转换为小写。 -
使用
collections.Counter
统计单词频率。 -
过滤掉禁用词
banned
,找到最高频的非禁用词。
下面是代码实现:
import re
import collections
def mostCommonWord(paragraph: str, banned: list) -> str:
# 规范化字符串:去除标点,转换为小写
words = re.findall(r'\w+', paragraph.lower())
# 统计词频
word_count = collections.Counter(words)
# 过滤掉禁用词,并返回最高频词
banned_set = set(banned)
for word, freq in word_count.most_common():
if word not in banned_set:
return word
示例:
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
print(mostCommonWord(paragraph, banned)) # 输出: "ball"
代码解析:
-
re.findall(r'\w+', paragraph.lower())
提取所有单词,并转换为小写。 -
Counter(words)
统计每个单词的出现次数。 -
word_count.most_common()
返回按频率排序的单词列表。 -
遍历排序后的单词,找到第一个不在
banned
列表中的单词并返回。
这个方法时间复杂度为 O(N),其中 N
是 paragraph
的长度,适用于大多数情况。