【卡码网】54. 替换数字——代码随想录算法训练营Day08

发布时间:2024年01月17日

题目链接:54. 替换数字

题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例
a1b2c3
输出示例
anumberbnumbercnumber
提示信息

数据范围:
1 <= s.length < 10000。

文章讲解:代码随想录

题解1:暴力法

思路:遍历一遍字符串,将数字字符替换为 "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)。

题解2:双指针

思路:扩充字符串的长度为替换后的字符串长度,从后向前替换字符串。

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)。

收获

了解了字符串的结构和替换字符串的操作,并手动编码完成替换操作。

文章来源:https://blog.csdn.net/m0_57521762/article/details/135649798
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。