中等题:不同整数的计数问题 | 豆包MarsCode AI刷题

98 阅读5分钟

问题描述

小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

问题分析

好的,以下是对问题的详细分析,写成一段300字的话:

问题分析

小R有一个由数字和小写英文字母组成的字符串 word。他希望用空格替换每一个不是数字的字符,然后统计替换后剩下的整数中不同整数的数目。问题的关键在于如何正确地提取整数、去除前导零以及统计不同整数的数量。首先,我们需要遍历字符串,将连续的数字字符拼接成整数字符串,并在遇到非数字字符时将其添加到列表中。接着,我们需要处理最后一个整数,确保它也被正确添加。为了去除前导零,我们可以在将整数字符串添加到列表之前,使用 lstrip('0') 方法去除前导零,如果去除后字符串为空,则将其视为 "0"。最后,我们使用集合来去除重复的整数,并返回不同整数的数量。通过这些步骤,我们可以有效地解决这个问题,确保提取的整数没有前导零,并且能够正确统计不同整数的数量。

算法步骤

好的,让我们来分析一下这个问题。

问题描述

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

关键点

  1. 替换非数字字符:将字符串中的非数字字符替换为空格。
  2. 提取整数:从替换后的字符串中提取出所有的整数。
  3. 去除前导零:确保提取的整数没有前导零。
  4. 统计不同整数:统计提取出的整数中不同的整数数量。

算法步骤

  1. 初始化列表:用于存储提取出的整数。
  2. 遍历字符串:逐个字符检查是否为数字。
  3. 构建整数字符串:将连续的数字字符拼接成整数字符串。
  4. 处理非数字字符:遇到非数字字符时,将当前整数字符串添加到列表中,并重置。
  5. 处理最后一个整数:确保最后一个整数也被添加到列表中。
  6. 去除前导零:在将整数字符串添加到列表之前,去除前导零。
  7. 去重:使用集合去除重复的整数。
  8. 返回结果:返回不同整数的数量。
def solution(word: str) -> int:
    # 1. 初始化一个空列表来存储找到的整数
    numbers = []
    
    # 2. 遍历字符串中的每一个字符
    current_number = ""
    for char in word:
        # 3. 如果字符是数字,将其添加到当前整数的字符串中
        if char.isdigit():
            current_number += char
        else:
            # 4. 如果当前整数字符串不为空,将其添加到列表中,并重置当前整数字符串
            if current_number:
                # 去除前导零
                current_number = current_number.lstrip('0')
                # 如果去除前导零后字符串为空,则视为0
                if not current_number:
                    current_number = "0"
                numbers.append(current_number)
                current_number = ""
    
    # 5. 处理最后一个整数(如果存在)
    if current_number:
        # 去除前导零
        current_number = current_number.lstrip('0')
        # 如果去除前导零后字符串为空,则视为0
        if not current_number:
            current_number = "0"
        numbers.append(current_number)
    
    # 6. 使用集合来去除重复的整数
    unique_numbers = set(numbers)
    
    # 7. 返回不同整数的数量
    return len(unique_numbers)

if __name__ == '__main__':
    print(solution("a123bc34d8ef34") == 3)
    print(solution("t1234c23456") == 2)
    print(solution("a1b01c001d4") == 2)

总结

这道题要求我们处理一个由数字和小写英文字母组成的字符串 word,目标是统计替换非数字字符后剩下的不同整数的数量。具体步骤包括:遍历字符串,将连续的数字字符拼接成整数字符串;遇到非数字字符时,将当前整数字符串添加到列表中,并重置;处理最后一个整数,确保其也被添加;去除前导零,确保整数没有前导零;使用集合去除重复的整数;最后返回不同整数的数量。通过这些步骤,我们可以有效地解决这个问题,确保提取的整数没有前导零,并且能够正确统计不同整数的数量。