开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
今天要验收了,单独部署的工程
字符串中不同整数的数目
该题出自力扣的1805题 —— 字符串中不同整数的数目【简单题】
审题
给你一个字符串 word ,该字符串由数字和小写英文字母组成。 请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123"、"34"、"8" 和 "34" 。 返回对 word 完成替换后形成的 不同 整数的数目。 只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。
- 今天这是一道简单题,虽然是简单题,但是容易阴沟里翻船,错了几次
- 给出一个字符串,返回字符串呢不同整数的数目
- 字符串由字母和数字组成,需要对字符串内的字母进行过滤
- 一开始是打算使用暴力遍历的,没想到用了Long型的数据结构,还是被长度100的纯数字击败
- 最终使用set的集合,作为查重的兜底
- 把字符串转化成字符的数组,可以对性能更为方便
- 遍历字符串
- 如果是当前坐标小于长度,并且不属于数字的话,直接跳过
- 做一个兜底的判断,如果当前下标大于长度的话,直接跳出循环返回
- 判断数字的起始与末尾下标,最终利用起始坐标对字符串进行分割
- 对数字的前导零进行处理,去除前导零
编码
class Solution {
public int numDifferentIntegers(String word) {
Set<String> set = new HashSet<>();
int n = word.length(),p2 = 0;
char[] chars = word.toCharArray();
for (int i = 0; i < n; i++) {
while (i < n && !Character.isDigit(chars[i])){
i++;
}
if (i>= n)break;
p2 = i;
while (p2 < n && Character.isDigit(chars[p2])){
p2++;
}
while (p2 -i > 1 && chars[i] == '0'){
i++;
}
set.add(word.substring(i,p2));
i = p2;
}
return set.size();
}
}