返回
破解 LeetCode 难题:找出段落中最常见的单词
Android
2023-12-28 08:50:11
引言:
准备在 LeetCode 的竞技场上大显身手吗?我们踏上了一段扣人心弦的旅程,探索算法的奥秘。今日的挑战:找出段落中最常见的单词,它将考验我们的逻辑思维和代码实现能力。
问题分解:
我们的目标是找出段落中出现的频率最高的单词,同时排除给定的禁用单词列表。问题分解如下:
- 输入:
- 段落 (paragraph):一个字符串,包含空格分隔的单词。
- 禁用单词列表 (banned):一个字符串数组,包含禁用单词。
- 输出:
- 最常见的单词:一个字符串,是段落中出现频率最高的单词,且不在禁用单词列表中。
算法设计:
我们将采用分而治之的方法来解决此问题:
- 预处理:
- 将段落转换为小写并按空格拆分成单词列表。
- 创建一个哈希表来存储单词及其出现次数。
- 筛选禁用单词:
- 遍历哈希表,删除禁用单词及其出现次数。
- 确定最常见单词:
- 再次遍历哈希表,找到出现次数最高的单词。
- 处理特殊情况:
- 若有多个单词出现次数相同,则返回按字母顺序排列的第一个单词。
代码实现:
def find_most_common_word(paragraph, banned):
# 预处理
words = paragraph.lower().split()
word_counts = {}
for word in words:
if word not in word_counts:
word_counts[word] = 0
word_counts[word] += 1
# 筛选禁用单词
for word in banned:
if word in word_counts:
del word_counts[word]
# 确定最常见单词
most_common_word = ""
max_count = 0
for word, count in word_counts.items():
if count > max_count:
most_common_word = word
max_count = count
elif count == max_count:
most_common_word = min(most_common_word, word)
return most_common_word
复杂度分析:
- 时间复杂度:O(n),其中 n 是段落中单词的数量。
- 空间复杂度:O(n),用于存储单词计数的哈希表。