代码随想录-04-字符串-03.替换数字

替换数字

题目

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。

例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

对于输入字符串 "a5b",函数应该将其转换为 "anumberb"

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

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

样例输入:a1b2c3

具体思路

  • 输入时计算数组中存在的数字数量,str[i] > "0" && str[i] < "9" 进行判断;
  • 记录输入的数量size,记录需要扩容的数量resize;
  • 从后往前 就不用移动原来中的元素(因为目的是O(1)的空间复杂度) 进行扩容;
  • 每查找到一个数字进行替换,否则正常复制。

具体代码

CPP
C++ 复制代码
#include <iostream>
using namespace std;

int main() {
    string s;
    cin >> s;
    int count = 0;

    // 统计数字字符的个数
    for (int  i = 0; i < s.size(); i++) {  
        if (s[i] >= '0' && s[i] <= '9') {  
            count++;
        }
    }

    int original_size = s.size(); // 保存原始字符串大小
    s.resize(original_size + count * 5); // 扩展字符串以容纳 "number"

    int k = s.size() - 1;  // 新字符串末尾的位置
    for (int j = original_size - 1; j >= 0; j--) {
        if (s[j] >= '0' && s[j] <= '9') {  // 判断是否为数字
            s[k] = 'r';
            s[k - 1] = 'e';
            s[k - 2] = 'b';
            s[k - 3] = 'm';
            s[k - 4] = 'u';
            s[k - 5] = 'n';  // 插入 "number"
            k -= 6;  // 减去 "number" 的长度
        } else {
            s[k] = s[j];  // 复制非数字字符
            k--;
        }
    }

    // 输出修改后的字符串
    cout << s << endl;

    return 0; 
}
Java直接版本
java 复制代码
import java.util.Scanner;

public class Main {

    public static void main(String[] s) {
        Scanner sc = new Scanner(System.in);
        String cur = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        int count = 0;
        for (int i = 0; i < cur.length(); i++) {
            if (cur.charAt(i) - '0' >= 0 && cur.charAt(i) - '0' <= 9) {
                sb.append("number");
            } else {
                sb.append(cur.charAt(i));
            }
        }
        System.out.println(sb.toString());

    }
}
相关推荐
英英_3 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
程序员-King.5 小时前
day143—递归—对称二叉树(LeetCode-101)
数据结构·算法·leetcode·二叉树·递归
仙俊红8 小时前
LeetCode174双周赛T3
数据结构·算法
仍然.8 小时前
JavaDataStructure---二叉搜索树,哈希表,Map和Set
数据结构·散列表
程序员-King.9 小时前
链表——算法总结与新手教学指南
数据结构·算法·链表
FMRbpm10 小时前
树的练习6--------938.二叉搜索树的范围和
数据结构·c++·算法·leetcode·职场和发展·新手入门
多米Domi01110 小时前
0x3f 第35天 电脑硬盘坏了 +二叉树直径,将有序数组转换为二叉搜索树
java·数据结构·python·算法·leetcode·链表
凯子坚持 c12 小时前
C++大模型SDK开发实录(一):spdlog日志封装、通用数据结构定义与策略模式应用
数据结构·c++·sdk·策略模式
漫随流水12 小时前
leetcode算法(513.找树左下角的值)
数据结构·算法·leetcode·二叉树
全栈游侠13 小时前
数据结构 -数组
数据结构