题目链接:54. 替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
输入一个字符串 s,s 仅包含小写字母和数字字符。
打印一个新的字符串,其中每个数字字符都被替换为了number
a1b2c3
anumberbnumbercnumber
数据范围:
1 <= s.length < 10000。
文章讲解:代码随想录
思路:遍历一遍字符串,将数字字符替换为 "number"。
注意:此题为 ACM 模式,需要自己在代码中读取输入,打印输出。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", (s) => {
console.log(s.split("").map(c => c.charCodeAt() >= "0".charCodeAt() && c.charCodeAt() <= "9".charCodeAt() ? "number" : c).join(""));
});
分析:时间复杂度为 O(n),空间复杂度为 O(n)。
思路:扩充字符串的长度为替换后的字符串长度,从后向前替换字符串。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("line", (s) => {
const sArr = s.split("");
let length = sArr.length;
// 计算扩充字符串s的大小,也就是每个数字替换成"number"之后的大小
for (let c of s) {
if (c.charCodeAt() >= "0".charCodeAt() && c.charCodeAt() <= "9".charCodeAt()) {
length += 5; // "number" 的长度减1
}
}
let i = sArr.length - 1, j = length - 1;
// 从后先前将空格替换为"number"
while (i >= 0) {
if (sArr[i].charCodeAt() >= "0".charCodeAt() && sArr[i].charCodeAt() <= "9".charCodeAt()) {
sArr[j] = "r";
sArr[j - 1] = "e";
sArr[j - 2] = "b";
sArr[j - 3] = "m";
sArr[j - 4] = "u";
sArr[j - 5] = "n";
j -= 6;
} else {
sArr[j--] = sArr[i];
}
i--;
}
console.log(sArr.join(""))
});
分析:时间复杂度为 O(n),空间复杂度为 O(n)。
了解了字符串的结构和替换字符串的操作,并手动编码完成替换操作。