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 的长度,适用于大多数情况。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

你给出的代码旨在解决一个关于摩尔斯电码的问题,比如 [LeetCode 804. Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/)。该问题要求将一组单词转换为摩尔斯电码,并统计其中有多少个**不同的摩尔斯电码表示**。 不过,你当前的代码中存在一些错误,特别是 `sovle` 函数中的逻辑错误和函数调用方式。我将为你详细解释并提供修正后的代码。 --- ### ✅ 正确的实现如下: ```python morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..", ".---","-.-",".-..","--","-.","---",".--.","--.-",".-.", "...","-","..-","...-",".--","-..-","-.--","--.."] def uniqueMorseRepresentations(words): # 使用集合存储不同的摩尔斯电码 morse_set = set() for word in words: # 将每个字母转换为其对应的摩尔斯电码 morse_code = ''.join(morses[ord(char) - ord('a')] for char in word) morse_set.add(morse_code) return len(morse_set) # 测试数据 words = ["gin", "zen", "gig", "msg"] print(uniqueMorseRepresentations(words)) # 输出: 2 ``` --- ### 🔍 代码解释: 1. **morses 列表**:存储了从 'a' 到 'z' 的摩尔斯电码。 2. **uniqueMorseRepresentations 函数**: - 接收一个字符串列表 `words`。 - 初始化一个空集合 `morse_set` 用于存储唯一的摩尔斯电码。 - 遍历每个单词 `word`,然后对每个字母进行转换。 - 使用 `ord(char) - ord('a')` 找到字母在 `morses` 列表中的索引。 - 将转换后的摩尔斯电码字符串加入集合。 3. 最后返回集合的长度,即不同的摩尔斯电码数量。 --- ### ❌ 原始代码问题: - `sovle` 函数中写成了 `for word in words_str`,但 `words_str` 是一个字符串,不是单词列表。 - `get_morses(words_str)` 应该是 `get_morses(word)`。 - `words = "GIN zen gig msg"` 没有被正确拆分成单词列表。 --- ### ✅ 如果你希望用原始方式修复,可以这样改: ```python morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---", "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-", "..-","...-",".--","-..-","-.--","--.."] def get_morses(word): morses_words_str = "" for letter in word.lower(): morses_words_str += morses[ord(letter) - 97] return morses_words_str def solve(words_str): words = words_str.split() # 将字符串分割成单词列表 s = set() for word in words: morses_word = get_morses(word) s.add(morses_word) return len(s) # 调用 words = "GIN zen gig msg" print(solve(words)) # 输出: 2 ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值