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

61 阅读2分钟
  • 问题分析

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

  • 输入格式:

  • 输入是一个字符串,包含数字(0-9)和小写字母(a-z)。

  • 例如,输入 "a123bc34d8ef34"。

2. 输出要求:

  • 输出不同整数的数量。整数的定义是由数字组成的字符串。

  • 需要注意的是,整数的前导零在比较时是无效的。例如,"01" 和 "1" 被视为相同的整数。

  • 处理步骤:

  • 替换非数字字符: 将字符串中的所有非数字字符替换为空格,以便于后续的分割操作。

  • 提取数字: 使用空格分割字符串,得到所有的数字部分。

  • 去除前导零: 将提取出的数字字符串转换为整数,这样可以自动去除前导零。

  • 统计不同的整数: 使用集合(set)来存储不同的整数,因为集合会自动处理重复的元素。

关键点

  • 字符串处理: 需要有效地处理字符串,确保所有非数字字符都被替换。

  • 集合的使用: 集合是一个非常适合用于存储唯一元素的数据结构,能够简化去重的过程。

  • 前导零的处理: 通过将字符串转换为整数,可以轻松去除前导零。

复杂度分析

  • 时间复杂度:

  • 遍历字符串的时间复杂度为 𝑂(𝑛)O(n),其中 𝑛n 是字符串的长度。

  • 分割字符串的时间复杂度也是 𝑂(𝑛)O(n)。

  • 因此,总的时间复杂度为 𝑂(𝑛)O(n)。

  • 空间复杂度:

  • 使用集合存储不同的整数,最坏情况下需要 𝑂(𝑛)O(n) 的空间(如果所有提取的数字都是不同的)。

  • 其他变量的空间使用是常数级别的。

  • 替换字符: 将字符串中的每个非数字字符替换为空格。

  • 提取整数: 使用空格分割字符串,提取出所有的数字部分。

  • 去除前导零: 对提取出的数字进行处理,去除前导零。

  • 统计不同的整数: 使用集合来存储不同的整数,因为集合会自动处理重复的元素。

实现步骤

  • 遍历字符串,将非数字字符替换为空格。

  • 使用 split() 方法将字符串分割成多个部分。

  • 使用集合来存储去除前导零后的数字。

  • 返回集合的大小,即不同整数的数量。