问题描述
小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,目标是统计替换后剩下的整数中不同整数的数目。具体步骤如下:
- 替换非数字字符:将字符串中的所有非数字字符替换为空格。
- 提取整数:将替换后的字符串按空格分割,提取出所有的整数。
- 去除前导零:对于提取出的每个整数,去除其前导零。
- 统计不同整数:使用集合(如
HashSet)来存储不同的整数,并返回集合的大小。
数据结构选择
- 字符串处理:使用
String类的replaceAll方法来替换非数字字符。 - 分割字符串:使用
split方法按空格分割字符串。 - 去重:使用
HashSet来存储不同的整数,因为HashSet会自动去重。
算法步骤
-
替换非数字字符:
- 使用
replaceAll("[^0-9]", " ")将所有非数字字符替换为空格。
- 使用
-
提取整数:
- 使用
split("\s+")按空格分割字符串,得到一个字符串数组。
- 使用
-
去除前导零:
- 对于每个提取出的整数,使用
replaceFirst("^0+(?!$)", "")去除前导零。
- 对于每个提取出的整数,使用
-
统计不同整数:
- 使用
HashSet存储处理后的整数,并返回集合的大小。
- 使用