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
(“不负有心人!
”FIGHTING. . . .)