返回

优化刷题记录——擒获最常出现的单词

后端

刷题利器:LeetCode 经典题 - 「最常见的单词」

在编程世界中,算法和数据结构是程序员的基石。它们帮助我们解决复杂问题,编写高效代码。LeetCode 是一个备受欢迎的在线刷题平台,拥有大量高质量算法题库,为程序员的技能提升提供了理想的途径。

「最常见的单词」:看似简单,蕴藏奥秘

「最常见的单词」是 LeetCode 上一道经典的简单题,它的题目简洁明了:

给定一个字符串,找出其中出现次数最多的单词。如果有多个单词出现次数相同,则返回其中任意一个。

不要被它的表象迷惑,这道题蕴藏着字符串处理、数据结构和算法的奥秘。

字符串预处理:清除杂质,提取真谛

首先,我们对字符串进行预处理,将标点符号和数字统统抹去,再将单词统一转换成小写,让字符串焕发出纯净之美。

单词计数:逐一统计,不漏分毫

接下来,我们使用一个字典来记录每个单词的出现次数。每次遇到一个单词,我们就查看字典中是否有它的记录,若无,则初始化为 0,若有,则将其计数加 1。就这样,字典中逐渐填充了每个单词的出现频率。

寻找最常见单词:取舍之间,一锤定音

最后,我们需要在字典中找到出现次数最多的单词。我们遍历字典,逐个比较单词的出现次数,记录出现次数最多的单词。如果存在多个单词出现次数相同,我们随机返回其中一个,让结果保持一丝不确定性。

代码实现:优雅简洁,一气呵成

def most_common_word(text):
    """
    找出字符串中出现次数最多的单词。

    :param text: 输入字符串
    :return: 出现次数最多的单词
    """

    # 字符串预处理
    text = text.lower()
    text = "".join(filter(str.isalpha, text))

    # 单词计数
    word_counts = {}
    for word in text.split():
        if word not in word_counts:
            word_counts[word] = 0
        word_counts[word] += 1

    # 寻找最常见单词
    most_common_word = ""
    max_count = 0
    for word, count in word_counts.items():
        if count > max_count:
            most_common_word = word
            max_count = count

    return most_common_word

举一反三,拓展视野

「最常见的单词」看似简单,却处处体现着算法和数据结构的精髓。通过解决这道题,我们不仅加深了对这些基本功的理解,更打开了通往算法世界的大门。

常见问题解答

  1. 为什么需要将字符串转换为小写?

将字符串转换为小写是为了避免大小写对单词计数的影响,确保结果的准确性。

  1. 如何处理特殊字符?

在预处理阶段,我们将字符串中所有非字母字符删除,避免它们影响单词计数。

  1. 如果出现多个最常见单词怎么办?

由于题目没有明确规定,我们随机返回其中一个最常见单词。

  1. 如何提高算法效率?

可以通过使用排序算法或堆数据结构来优化单词计数过程,提高算法效率。

  1. 刷题的意义何在?

刷题是程序员提升技能、巩固算法基础的有效途径,为实际工作中的问题解决打下坚实基础。

结语:刷题不止,精进不息

LeetCode 上的「最常见的单词」是一道入门级的经典算法题。通过解决这道题,我们领略了算法和数据结构的魅力。刷题之路永无止境,让我们在算法的海洋中不断遨游,精进我们的编程技能,成就更美好的技术未来。