字符串中不同整数的数目

标签: 哈希表 字符串

难度: Easy

给你一个字符串 word ,该字符串由数字和小写英文字母组成。

请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123  34 8  34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123""34""8""34"

返回对 word 完成替换后形成的 不同 整数的数目。

只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。

 

示例 1:

输入:word = "a123bc34d8ef34"
输出:3
解释:不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次。

示例 2:

输入:word = "leet1234code234"
输出:2

示例 3:

输入:word = "a1b01c001"
输出:1
解释:"1"、"01" 和 "001" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。

 

提示:

  • 1 <= word.length <= 1000
  • word 由数字和小写英文字母组成

Submission

运行时间: 23 ms

内存: 16.1 MB

class Solution:
    def numDifferentIntegers(self, word: str) -> int:
        s = set()
        tmp = ""
        for i in word:
            if i.isdigit():
                tmp += i
            else:
                if tmp:
                    s.add(int(tmp))
                tmp = ""
        if tmp:
            s.add(int(tmp))
        return len(s)

Explain

这个题解的主要思路是遍历字符串,将所有数字字符划分为连续的数字串,并在遇到非数字字符时将之前的数字串转换为整数并存入集合中。这样可以自动去除重复的数字,并且转换为整数时会忽略前导零。遍历完成后,再次检查是否有未处理的数字串,如果有,同样转换后添加到集合中。最后,集合中元素的数量即为不同整数的数目。

时间复杂度: O(n)

空间复杂度: O(n)

class Solution:
    def numDifferentIntegers(self, word: str) -> int:
        s = set()  # 用于存储不同的整数
        tmp = ''  # 临时字符串,用于构建数字
        for i in word:
            if i.isdigit():
                tmp += i  # 如果是数字,添加到临时字符串
            else:
                if tmp:
                    s.add(int(tmp))  # 如果临时字符串非空,转换为整数,添加到集合
                tmp = ''  # 重置临时字符串
        if tmp:
            s.add(int(tmp))  # 处理最后一个可能的数字
        return len(s)  # 返回不同整数的数量

Explore

在代码中,通过使用集合(set)来存储数字,可以自动处理去重的问题。每次遇到非数字字符时,检查临时字符串(tmp)是否非空,如果非空,则将其转换为整数并加入集合。由于集合的特性是不允许存储重复的元素,因此即便多次尝试将同一数字加入集合,它只会被存储一次。这确保了每个数字字符串只被处理和加入集合一次。

集合(set)在Python中是一个无序的数据结构,它自动去除了任何重复的元素。当将字符串转换为整数后加入到集合中,所有整数都是基于其数值进行比较和存储的,而不是它们的字符串形式。因此,不管是`123`、`0123`还是`00123`,在转换为整数后,它们都被视为同一个数值`123`,并且只会在集合中存储一份。这样前导零自然被忽略,且相关的整数只保存一次。

在Python中,使用`int`函数将字符串转换为整数时,这个函数自动忽略字符串中的所有前导零。例如,当`int`函数用于转换`'000123'`,它会解析出整数值`123`。这意味着任何数量的前导零都不会影响最终的数值结果。因此,在算法中,即使输入字符串包含多个前导零,使用`int`函数转换后得到的整数值仍是正确的数字表示。