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

27 阅读2分钟

问题描述

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

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

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


测试样例

样例1:

输入:
输出:word = "a123bc34d8ef34"``3

样例2:

输入:
输出:word = "t1234c23456"``2

样例3:

输入:
输出:word = "a1b01c001d4"``2

问题理解

你需要处理一个由数字和小写英文字母组成的字符串 word,目标是统计替换后剩下的整数中不同整数的数目。具体步骤如下:

  1. 替换非数字字符:将字符串中的所有非数字字符替换为空格。
  2. 提取整数:将替换后的字符串按空格分割,提取出所有的整数。
  3. 去除前导零:对于提取出的每个整数,去除其前导零。
  4. 统计不同整数:使用集合(如 HashSet)来存储不同的整数,并返回集合的大小。

数据结构选择

  • 字符串处理:使用 String 类的 replaceAll 方法来替换非数字字符。
  • 分割字符串:使用 split 方法按空格分割字符串。
  • 去重:使用 HashSet 来存储不同的整数,因为 HashSet 会自动去重。

算法步骤

  1. 替换非数字字符

    • 使用 replaceAll("[^0-9]", " ") 将所有非数字字符替换为空格。
  2. 提取整数

    • 使用 split("\s+") 按空格分割字符串,得到一个字符串数组。
  3. 去除前导零

    • 对于每个提取出的整数,使用 replaceFirst("^0+(?!$)", "") 去除前导零。
  4. 统计不同整数

    • 使用 HashSet 存储处理后的整数,并返回集合的大小。