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

819. 最常见的单词


题目要求:

给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。

题目保证至少有一个词不在禁用列表中,而且答案唯一。

禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。


解题思路:
  • 按照要求先去除标点符号;
  • 再转换大写字母;
  • 再获取每个单词;
  • 再排除被禁止单词,获取最多数目的单词。

题解代码:
class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
            #取消字符串中的标点符号,并用空格代替
            for i in "!?',;.":
                paragraph = paragraph.replace(i," ")
            #给字符串最后一位增加一个空格,方便统计最后一个单词
            parags = paragraph + " "

            #遍历字符串中的每个元素,将大写字母全部转为小写字母
            for i in range(len(parags)):
                if 90 >= ord(parags[i]) >= 65:
                    parags = parags.replace(parags[i], chr(ord(parags[i]) + 32))

            #构建一个单词列表,获取字符串中的所有单词
            words = []
            #a为每个单词的初始位置
            a = 0
            #n为字符串长度
            n = len(parags)
            for j in range(a,n):
                #当遇到空格时,则获取单词,并删除单词中的空格以及排除空字符串
                if parags[j] == " " and parags[a:j].replace(" ","") !="":
                    words.append(parags[a:j].replace(" ",""))
                    a = j+1
            
            #保存最大个数单词的个数
            wordnum = 0
            #保存最大个数的单词
            word = ""
            #依据条件排除被禁止的单词,获取最大数目的单词
            for i in words:
                if i not in banned and words.count(i)>wordnum:
                    wordnum = words.count(i)
                    word = i
            return word

我的leetcode.


(“不负有心人!”FIGHTING. . . .)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值