问题描述
小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。
例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123"、"34"、"8" 和 "34"。不同的整数有三个,即 "123"、"34" 和 "8"。
注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。
利用豆包MarsCode AI刷题为我提供了解题思路: 问题理解 你需要处理一个由数字和小写英文字母组成的字符串,目标是统计替换后剩下的不同整数的数量。具体步骤如下: 替换非数字字符:将字符串中的所有非数字字符替换为空格。 提取整数:从替换后的字符串中提取出所有的整数。 去重:将提取出的整数去重,并统计不同整数的数量。 数据结构选择 字符串处理:使用正则表达式来提取字符串中的数字部分。 去重:使用集合(set)来存储不同的整数,因为集合会自动去重。 算法步骤 使用正则表达式提取数字:使用 re.findall(r'\d+', word) 来提取字符串中的所有连续数字。 去除前导零:将提取出的数字转换为整数,这样可以自动去除前导零。 去重并统计:将转换后的整数放入集合中,集合的大小即为不同整数的数量。 代码框架 你可以参考以下思路来实现代码: 导入正则表达式模块:import re 提取数字:使用 re.findall(r'\d+', word) 提取所有连续的数字。 转换为整数并去重:将提取出的数字转换为整数,并放入集合中。 返回集合的大小:集合的大小即为不同整数的数量。
根据思路编写了以下代码: def solution(word: str) -> int: # 使用正则表达式提取所有连续数字的部分 import re numbers = re.findall(r'\d+', word)
# 去除前导零并转换为整数集合(自动去重)
distinct_numbers = set(int(num) for num in numbers)
# 返回不同整数的数量
return len(distinct_numbers)
if name == 'main': print(solution("a123bc34d8ef34") == 3) # 输出: True print(solution("t1234c23456") == 2) # 输出: True print(solution("a1b01c001d4") == 2) # 输出: True
利用豆包MarsCode AI帮我检查了代码:
代码分析 正则表达式提取数字: re.findall(r'\d+', word) 这部分代码是正确的,它能够提取出字符串中的所有连续数字。 去除前导零并转换为整数集合: set(int(num) for num in numbers) 这部分代码也是正确的,它将提取出的数字转换为整数并放入集合中,集合会自动去重。 返回不同整数的数量: return len(distinct_numbers) 这部分代码也是正确的,它返回集合的大小,即不同整数的数量。