-
Notifications
You must be signed in to change notification settings - Fork 0
/
mostCommonWord.py
77 lines (52 loc) · 2.18 KB
/
mostCommonWord.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# https://leetcode.com/problems/most-common-word/description/
# 819. Most Common Word
# Given a paragraph and a list of banned words, return the most frequent word that is not in the
# list of banned words. It is guaranteed there is at least one word that isn't banned, and that
# the answer is unique.
# Words in the list of banned words are given in lowercase, and free of punctuation. Words in the
# paragraph are not case sensitive. The answer is in lowercase.
# Example:
# Input:
# paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
# banned = ["hit"]
# Output: "ball"
# Explanation:
# "hit" occurs 3 times, but it is a banned word.
# "ball" occurs twice (and no other word does), so it is the most frequent non-banned word in the
# paragraph.
# Note that words in the paragraph are not case sensitive,
# that punctuation is ignored (even if adjacent to words, such as "ball,"),
# and that "hit" isn't the answer even though it occurs more because it is banned.
# Note:
# 1 <= paragraph.length <= 1000.
# 1 <= banned.length <= 100.
# 1 <= banned[i].length <= 10.
# The answer is unique, and written in lowercase (even if its occurrences in paragraph may have
# uppercase symbols, and even if it is a proper noun.)
# paragraph only consists of letters, spaces, or the punctuation symbols !?',;.
# Different words in paragraph are always separated by a space.
# There are no hyphens or hyphenated words.
# Words only consist of letters, never apostrophes or other punctuation symbols.
from collections import Counter as c
def mostCommonWord(paragraph, banned):
"""
:type paragraph: str
:type banned: List[str], in lowercase, and free of punctuation
:rtype: str
"""
adjusted_paragraph = []
for word in paragraph.lower().split():
tmp = word.strip("!?',;.")
if not tmp in banned:
adjusted_paragraph.append(tmp)
d = c(adjusted_paragraph)
count = 0
res = ''
for word, num in d.items():
if num > count:
res = word
count = num
return res
assert mostCommonWord("Bob hit a ball, the hit BALL flew far after it was hit.", ["hit"]) == 'ball'
assert mostCommonWord("ask ? ? ?.", ["hit"]) == ''
assert mostCommonWord("Bob. hIt, baLl", ["bob", "hit"]) == 'ball'