开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
题目描述
给你一个字符串 word ,该字符串由数字和小写英文字母组成。
请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123"、"34"、"8" 和 "34" 。
返回对 word 完成替换后形成的 不同 整数的数目。
只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。
来源:力扣(LeetCode)
- 示例 1
输入: word = "a123bc34d8ef34"
输出: 3
解释: 不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次
- 示例 2
输入: word = "leet1234code234"
输出: 2
- 示例 3
输入:word = "a1b01c001"
输出:1
解释:"1"、"01" 和 "001" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。
思路分析
根据题意可知,题目给出一个字符串word,该字符串由数字和小写英文字母组成。使用空格将里面的字母全部都替换掉,切割成多个数字,计算出去重后数字的个数。
首先我们需要将字符串里面的字母都给转成空格,这样就形成一个只有数字和空格的字符串,再将字符串转成数组。循环数组,若是循环项是空格则不进行下一步,若是有值,就可以判断该循环项是不是一个正常的数字,若是该数字是以0开头的就需要将0删除,直至删除到不是以0开头的,或者最后一个是0;上述流程走完之后还需要再判断数组内是否有重复的,若是没有就可以将数字push进去。最后就计算出结果数组的长度就可以了。
AC代码
function solution(strs) {
let s = strs.replaceAll(/[a-z]/g, ' ');
let numList = s.split(' ');
let copyList = [];
numList.forEach( item => {
if( item) {
while(item !== '0' && item[0] === '0'){
item = item.slice(1);
}
if(!copyList.includes(item)) {
copyList.push(item);
}
}
})
console.log(copyList.length)
}
let a = "a123bc34d8ef034";
solution(a)