问题描述
小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。
例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123"、"34"、"8" 和 "34"。不同的整数有三个,即 "123"、"34" 和 "8"。
注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。
测试样例
样例1:
输入:
word = "a123bc34d8ef34"
输出:3
样例2:
输入:
word = "t1234c23456"
输出:2
样例3:
输入:
word = "a1b01c001d4"
输出:2
具体步骤
- 初始化一个空字符串
modifiedWord用于存储替换后的结果。 - 遍历输入字符串
word中的每一个字符:
- 如果当前字符是数字或者是空格,直接将其添加到
modifiedWord中。 - 如果当前字符不是数字,将其替换为一个空格后添加到
modifiedWord中。
- 将
modifiedWord以空格为分隔符拆分成一个字符串数组numbers。 - 初始化一个空集合
uniqueNumbers用于存储不同的整数。 - 遍历
numbers数组,将每一个字符串转换为整数并添加到uniqueNumbers集合中。 - 返回
uniqueNumbers集合的大小,即不同整数的数量。
代码解析
function solution(word) {
let uniqueNumbers = new Set();
let currentNumber = "";
for (let char of word) {
if (!isNaN(char)) {
currentNumber += char;
} else {
if (currentNumber !== "") {
uniqueNumbers.add(parseInt(currentNumber));
currentNumber = "";
}
}
}
if (currentNumber !== "") {
uniqueNumbers.add(parseInt(currentNumber));
}
return uniqueNumbers.size;
}
console.log(solution("a123bc34d8ef34") === 3);
console.log(solution("t1234c23456") === 2);
console.log(solution("a1b01c001d4") === 2);
涉及到的知识点
-
字符串遍历:
- 使用
for...of循环遍历字符串中的每个字符。
- 使用
-
类型判断:
- 使用
isNaN()函数判断字符是否为数字。
- 使用
-
字符串拼接:
- 使用字符串拼接的方式构建当前数字字符串。
-
前导零处理:
- 使用
parseInt()函数去除前导零。
- 使用
-
集合操作:
- 使用
Set数据结构来存储唯一的整数,从而避免重复。
- 使用
-
条件判断:
- 使用条件语句来处理边界情况,例如最后一个数字子串的处理。
-
函数返回值:
- 返回
Set的大小,即不同整数的数量。
- 返回
总结
通过青训营豆包MarsCode AI刷题,我学到了如何利用循环遍历字符串中的字符,并在遇到数字时提取整数值。然后,将提取的整数值存储到集合中,以实现去重的效果,并最终返回不同整数的数量。 当然,豆包MarsCode AI刷题工具也凭借其智能、高效的特性,极大地助力了我们的编程学习之旅,显著提升了学习质量和效率。该工具不仅能即时反馈并纠正错误,还具备智能优化、代码注释生成等多种实用功能。这些功能使得用户更容易找到错误根源,并在此基础上培养优化代码的能力,进而提高代码的可读性和规范性。特别值得一提的是,它能够提供多种解题思路和个性化的代码注释,这有助于学习者在夯实基础的同时逐步提升技能,对编程有更系统和深入的理解。
从我个人的使用经验来看,豆包MarsCode不仅提升了我的编程效率,还改变了我对编程学习的看法。每当我遇到难题时,这款工具总能在关键时刻提供有效的帮助,让我能够快速克服难关。此外,借助AI的优化建议,我的代码质量有了明显的提升,不再仅仅满足于“能运行”,而是追求更高的效率和更好的设计。
在当前AI技术迅猛发展的背景下,像豆包MarsCode这样的创新AI学习工具无疑为编程学习提供了强大的支持。它使复杂的学习过程变得更加智能和便捷,使编程不再是令人望而生畏的任务,而是变成了一种充满乐趣的学习体验。