1805. 字符串中不同整数的数目

题目

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

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

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

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

示例1:

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

示例2:

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

示例3:

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

提示:

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

解法

解法一:

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public int numDifferentIntegers(String word) {
Set<String> set = new HashSet<>();
for (int i = 0;i < word.length();i++) {
if (Character.isDigit(word.charAt(i))) {
int j = i + 1;
while (j < word.length() && Character.isDigit(word.charAt(j))) {
j++;
}
set.add(trimZero(word.substring(i, j)));
i = j;
}
}
return set.size();
}

private String trimZero(String string) {
if (1 == string.length()) {
return string;
}

for (int i = 0;i < string.length();i++) {
if ('0' != string.charAt(i)) {
return string.substring(i);
}
}
return "0";
}
0%