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

37 阅读2分钟

题目描述

小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"))