给你一个字符串 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 由数字和小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-different-integers-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:字符串转数组后,可以利用数字可拆分,在数组中只取为数字的字符,转为整形后再组成完整数字;因为不同整形只记一次,可以用Set容器的特性,很好完成整数的计数。
注:因为整数的计数不排除0,所以对于0的情况也应考虑;
对于最后几个或一个字符也整形,最后一定要做好判断;
class Solution {
public int numDifferentIntegers(String word) {
char[] str=word.toCharArray();
Set<Integer> set=new TreeSet<Integer>();
int j=-1;
for(int i=0;i<str.length;i++){
if(str[i]>='0'&&str[i]<='9'){
int n=Integer.parseInt(str[i]+"");
if(j==-1)
j=0;
j=n+j*10;
}else{
if(j!=-1)
set.add(j);
j=-1;
}
}
if(j!=-1)
set.add(j);
return set.size();
}
}