不同整数的计数问题 | 豆包MarsCode AI刷题

65 阅读2分钟

问题描述

小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。

例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123""34""8" 和 "34"。不同的整数有三个,即 "123""34" 和 "8"

注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。

解题思路

  1. 替换非数字字符:遍历字符串,将所有非数字字符替换为空格。
  2. 提取整数:将替换后的字符串按空格分割,提取出所有的整数。
  3. 去除前导零:对每个整数去除前导零。
  4. 去重:将去除前导零后的整数去重,并统计不同整数的数量。

代码详解

def solution(word: str) -> int:
    # 替换非数字字符
    word_with_spaces = ''.join(' ' if not char.isdigit() else char for char in word)
    
    # 按空格分割,提取出一个列表
    integers = word_with_spaces.split()
    # 去零
    cleaned_integers = [int(num) for num in integers]
    
    # set() 将列表转换为集合,自动去除重复的整数
    unique_integers = set(cleaned_integers)
    
    return len(unique_integers)
  1. 首先,使用列表推导式遍历字符串中的每个字符,如果字符是数字则保留,否则替换为空格。 ''.join(...) 将列表中的字符重新组合成一个字符串。
  2. 使用 split() 方法将字符串按空格分割,得到一个包含所有整数的列表。
  3. 使用 int(num) 将每个字符串形式的整数转换为整数类型,自动去除前导零。
  4. 使用 set() 将列表转换为集合,自动去除重复的整数。最后返回集合的长度,即不同整数的数量。

总结

  • 掌握如何使用列表推导式和 join 方法来处理字符串中的字符。
  • 学会使用 split 方法按特定字符分割字符串。
  • 理解字符串到整数的转换,以及如何利用整数类型自动去除前导零。
  • 了解集合 set 的去重功能,并能将其应用于统计不同元素的数量。