-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMost_Common_Word.py
59 lines (43 loc) · 2.02 KB
/
Most_Common_Word.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
# Given a string paragraph and a string array of the banned words banned, return the most frequent word that is not banned.
# It is guaranteed there is at least one word that is not banned, and that the answer is unique.
# The words in paragraph are case-insensitive and the answer should be returned in lowercase.
# Example 1:
# 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.
# Example 2:
# Input: paragraph = "a.", banned = []
# Output: "a"
# Constraints:
# 1 <= paragraph.length <= 1000
# paragraph consists of English letters, space ' ', or one of the symbols: "!?',;.".
# 0 <= banned.length <= 100
# 1 <= banned[i].length <= 10
# banned[i] consists of only lowercase English letters.
import re
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
# seperate the words in the paragraph
words = re.split(",| |\\.|!|\\?|;|'", paragraph)
# we will collect verified words into a map with thier frequencies
words_verified_map = {}
for word in words:
if word == '' or word.lower() in banned:
continue
if word.lower() not in words_verified_map:
words_verified_map[word.lower()] = 1
else:
words_verified_map[word.lower()] += 1
# now let's keep track of the max frequency word
max_freq = -1
answer = ""
for word, freq in words_verified_map.items():
if freq > max_freq:
max_freq = freq
answer = word
return answer