python-leetcode-819. 最常见的单词

819. 最常见的单词 - 力扣(LeetCode)

可以使用 Python 来解决这个问题,具体步骤如下:

  1. 处理 paragraph,去掉标点符号并转换为小写。

  2. 使用 collections.Counter 统计单词频率。

  3. 过滤掉禁用词 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"

代码解析:

  1. re.findall(r'\w+', paragraph.lower()) 提取所有单词,并转换为小写。

  2. Counter(words) 统计每个单词的出现次数。

  3. word_count.most_common() 返回按频率排序的单词列表。

  4. 遍历排序后的单词,找到第一个不在 banned 列表中的单词并返回。

这个方法时间复杂度为 O(N),其中 Nparagraph 的长度,适用于大多数情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值