---
# System prepended metadata

title: '1805. 字符串中不同整数的数目 [Easy][Hashtable]'

---

# 1805. 字符串中不同整数的数目 [Easy][Hashtable]
给你一个字符串 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" 视为同一个整数的十进制表示，因为在比较十进制值时会忽略前导零的存在。
```

題解思路：

模擬，遍歷字串word，若當前字元為數字時，記錄其起始及結束位置，截取這串子字串，存入hashset裡。
利用去除重複的子字串。返回此set的大小即可。

```java=
class Solution {
    public int numDifferentIntegers(String word) {
        int n = word.length();
        Set<String> set = new HashSet<>();
        for(int i=0;i<n;i++){
            if(word.charAt(i) <='9'){
                int j=i;
                while(j<n && word.charAt(j) <='9') j++;
                while(i<j && word.charAt(i) =='0') i++;
                set.add(word.substring(i, j));
                i = j;
            }
            
        }
        return set.size();
    }
}

```