Skip to content

替换数字

时间限制:1.000S  空间限制:128MB

题目描述

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

输入描述

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

输出描述

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

输入示例

java
a1b2c3

输出示例

java
anumberbnumbercnumber

提示信息

数据范围:
1s.length10000

解法一(模拟)

思路分析:

  1. 根据题目意思,直接暴力模拟即可,首先读取输入的字符串,然后对字符串进行遍历,若发现字符串属于数字字符,则将其替换为number

  2. 遍历完读取的字符串后,返回结果字符串

实现代码如下:

java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * 54. 替换数字(第八期模拟笔试)
 * @author 花木凋零成兰
 *
 */
public class Main{

    public static void main(String[] args) throws IOException {
//        Scanner scanner = new Scanner(System.in);
        String s = Reader.nextLine();  // 读取字符串
        int n = s.length();     // 字符串的长度
        // StringBuilder ans = new StringBuilder();  // 返回结果字符串
        int count = 0;      // 记录数字字符个数

        for (int i = 0; i < n; ++i) {
            char ch = s.charAt(i);
            if (ch >= '0' && ch <= '9') {   // 若为数字字符 则计数
                ++ count;
            }
        }
        int len = n + count*5;
        char[] ans = new char[len];
        int index = 0;
        for (int i = 0; i < n; ++i) {
            char ch = s.charAt(i);
            if (ch >= '0' && ch <= '9') {   // 若为数字字符 则替换为number
                ans[index++] = 'n';
                ans[index++] = 'u';
                ans[index++] = 'm';
                ans[index++] = 'b';
                ans[index++] = 'e';
                ans[index++] = 'r';
            } else {
                ans[index++] = ch;
            }
        }
        // System.out.println(new String(ans));

        PrintWriter out = new PrintWriter(System.out);  // 快速输出
        out.println(new String(ans));
        out.flush();
    }

}

/**
 * 快读
 */
class Reader {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");
    static String nextLine() throws IOException {// 读取下一行字符串
        return reader.readLine();
    }
    static String next() throws IOException {   // 读取下一个字符串
        while (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException {// 读取下一个int型数值
        return Integer.parseInt(next());
    }

    static double nextDouble() throws IOException {// 读取下一个double型数值
        return Double.parseDouble(next());
    }
}

提交结果如下:

text
time_space_table:
/1064/sample.in:AC mem=11264k time=114ms
/1064/test1.in:AC mem=11352k time=116ms
/1064/test2.in:AC mem=11352k time=113ms
/1064/test3.in:AC mem=11364k time=115ms
/1064/test4.in:AC mem=11364k time=110ms
/1064/test5.in:AC mem=11376k time=115ms
/1064/test6.in:AC mem=11376k time=111ms
/1064/test7.in:AC mem=11376k time=113ms
/1064/test8.in:TLE mem=11428k time=117ms

复杂度分析:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)