题目描述
小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。
例如,给定字符串"a123bc34d8ef34",替换后形成的字符串是"123 34 8 34",剩下的整数是"123"、"34"、"8"和"34"。不同的整数有三个,即"123"、"34"和"8"。
注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。
测试样例:
- 样例1:输入: word = "a123bc34d8ef34"输出:3
- 样例2:输入: word = "t1234c23456"输出: 2
- 样例3:输入: word = "a1b01c001d4"输出: 2
分析
由题干得知我们需要分三步来完成这道题目:
1、分割字符串得到整数与字母
2、处理前导0
3、统计不同整数的数量
对于第一点,我在这里采取正则表达式的方式,用空格将数字与字母用空格隔开,方便后续的处理。关于前导0的处理,其实这一点的处理方法比较灵活,因为思考一下就能知道,一个带有前导0的数分为两类,一类是非0,另一类就是0。对于非0的数,我调用函数lstrip将其左边的所有前导0删除后判断这个整数是否重复后加入到计数列表之中即可。最后的统计部分只需返回计数列表的长度即可
涉及知识点:
lstrip()方法:
lstrip() 方法用于截掉字符串左边的空格或指定字符,返回截掉字符串左边的空格或指定字符后生成的新字符串。
正则表达式:
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
re.sub(pattern, repl, string)
参数:
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
AC代码
from enum import unique
import re
def solution(word: str) -> int:
word = re.sub(r'\D', ' ', word)
intergers = re.findall(r'\d+', word)
unique_integers = set()
for num in intergers:
num = num.lstrip('0')
if num =='':
num = 0
unique_integers.add(num)
return len(unique_integers)
if __name__ == '__main__':
print(solution("a123bc34d8ef34"))
print(solution("t1234c23456") == 2)
print(solution("a1b01c001d4"))