代码随想录-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());

    }
}
相关推荐
buyue__44 分钟前
C++实现数据结构——链表
数据结构·c++·链表
Ayanami_Reii1 小时前
进阶数据结构应用-SPOJ 3267 D-query
数据结构·算法·线段树·主席树·持久化线段树
Genevieve_xiao2 小时前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
仰泳的熊猫2 小时前
1031 Hello World for U
数据结构·c++·算法·pat考试
liu****3 小时前
12.C语言内存相关函数
c语言·开发语言·数据结构·c++·算法
FMRbpm3 小时前
栈练习--------从链表中移除节点(LeetCode 2487)
数据结构·c++·leetcode·链表·新手入门
C雨后彩虹3 小时前
矩阵扩散问题
java·数据结构·算法·华为·面试
sin_hielo4 小时前
leetcode 3432
数据结构·算法·leetcode
代码游侠4 小时前
数据结构——树
数据结构·算法