单词出现频率统计 | 豆包MarsCode AI刷题

160 阅读2分钟

问题描述

小U在学习英文时,需要统计英文句子中每个单词的出现次数,并按照字母顺序将统计结果进行排序。请你帮助小U编写一个程序,统计输入的英文句子中每个单词的出现次数,并将结果按字母顺序排序后输出。

解题思路

我们需要统计一个英文句子中每个单词的出现次数,并将结果按照字母顺序排序后输出。输出格式为 ['单词:次数', ...]

解题步骤

  1. 分割句子:将输入的句子分割成单词列表。
  2. 统计单词频率:遍历单词列表,使用字典统计每个单词的出现次数。
  3. 排序:将字典中的键值对按照键(即单词)的字母顺序进行排序。
  4. 格式化输出:将排序后的单词和它们的频率格式化为题目要求的输出格式。

详细代码

def solution(s: str) -> list:
    # 1. 分割句子为单词列表
    words = s.split()
    
    # 2. 统计单词频率
    word_count = {}
    for word in words:
        if word in word_count:
            word_count[word] += 1
        else:
            word_count[word] = 1
    
    # 3. 按照字母顺序排序
    sorted_words = sorted(word_count.items())
    
    # 4. 格式化输出
    result = [f"{word}:{count}" for word, count in sorted_words]
    
    return result

if __name__ == '__main__':
    print(solution("New to Python or choosing between Python 2 and Python 3 Read Python 2 or Python 3") == ['2:2', '3:2', 'New:1', 'Python:5', 'Read:1', 'and:1', 'between:1', 'choosing:1', 'or:2', 'to:1'])
    print(solution("hello world hello python") == ['hello:2', 'python:1', 'world:1'])
    print(solution("the quick brown fox jumps over the lazy dog") == ['brown:1', 'dog:1', 'fox:1', 'jumps:1', 'lazy:1', 'over:1', 'quick:1', 'the:2'])
  1. 分割句子:使用 split() 方法将输入的字符串 s 分割成一个单词列表。

  2. 统计单词频率

  • 创建一个空字典 word_count

  • 遍历单词列表,对于每个单词,检查它是否已经在字典中。

    • 如果存在,则将对应的值加 1。
    • 如果不存在,则将单词添加到字典中,并设置值为 1。
  1. 排序:使用 sorted() 函数对字典的键值对进行排序。sorted() 函数会返回一个按照键(即单词)的字母顺序排序的列表。

  2. 格式化输出:遍历排序后的列表,将每个单词和它的出现次数格式化为 '单词:次数' 的形式,并添加到结果列表中。

小结

通过以上步骤,我们可以有效地统计英文句子中每个单词的出现次数,并按照字母顺序排序后输出。这个方法的时间复杂度主要取决于排序操作,通常为 O(n log n),其中 n 是单词的数量。