开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 8 天,点击查看活动详情
字符串中不同整数的数目
原题地址
给你一个字符串 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 <= 1000word由数字和小写英文字母组成
思路分析
- 首先可以根据正则匹配将非数字替换成空格,正则为
/[a-zA-z]/g; - 替换后的字符串按照空格进行分割成数组,
a123bc34d8ef34为例,分割后的数组为[ '', '123', '', '34', '8', '', '34' ]; - 题目要求统计整数,那么需要把 空字符串 过滤掉,使用数组的
filter方法过滤; - 题目要求前导零需要去掉,那么定义一个方法
deletFirstZero来删除前导零,方法中若字符串的第一个字符不为0就返回该字符串,否则继续递归除第一位外的剩余字符串,直到第一位不为0为止; - 经过上述操作后,将数组去重返回长度即可。去重使用的
new Set(word)。
AC 代码
/**
* @param {string} word
* @return {number}
*/
var numDifferentIntegers = function(word) {
word = word.replace(/[a-zA-z]/g, ' ').split(' ')
word = word.filter(item => item !== '')
word = word.map(item => item = deletFirstZero(item))
return Array.from(new Set(word)).length
};
deletFirstZero = function(num) {
if(num[0] !== '0') return num
num = num.substring(1)
return deletFirstZero(num)
}
结果:
- 执行结果: 通过
- 执行用时:68 ms, 在所有 JavaScript 提交中击败了26.92%的用户
- 内存消耗:42.9 MB, 在所有 JavaScript 提交中击败了15.38%的用户
- 通过测试用例:85 / 85