当前位置: 首页 > news >正文

代码随想录刷题day23|(字符串篇)54. 替换数字

目录

一、题目思路

二、复杂度分析

三、相关算法题目

四、相关知识点

1. Java 中数组复制

2.String的注意点


一、题目思路

第一步,统计字符串中数字的个数count,用于计算扩展后数组的长度newSize(=原本长度+count * 5);第二步,新建一个字符串数组newS,长度为newSize,将原数组中的元素复制到新数组中;第三步,双指针从后向前遍历新数组,将数字替换为number;

将元素复制到新数组中时,有两种方法;

1.使用Sysem.arraycopy

public class Main {
    public static void main(String[] args) {
        char[] src = {'a', 'b', 'c', 'd'};
        char[] dest = new char[4];

        // 使用 System.arraycopy 复制数组
        System.arraycopy(src, 0, dest, 0, src.length);

        // 输出目标数组
        System.out.println("目标数组内容:");
        for (char c : dest) {
            System.out.print(c + " ");
        }
    }
}

2.手动循环实现复制

for (int i = 0; i < src.length; i++) {
    dest[i] = src[i];
}

 1的效率更高

二、复杂度分析

时间复杂度:O(n)

主要由以下几个部分决定:1.统计数字的个数,遍历字符串一次,时间复杂度为O(n),n为字符串长度;2.复制原数组中的元素,遍历字符串一次,时间复杂度为O(n);3.将数字替换成number,从后向前遍历字符串一次,时间复杂度为O(n);综上,总时间复杂度为O(n);

空间复杂度:O(n)

主要由以下几个部分决定:1.统计数字个数,使用一个变量count,空间复杂度为O(1);2.创建新数组,长度为s.length() + count * 5,最坏情况下全是数字,count=n,长度为n+ 5n = 6n,空间复杂度为O(n);3.其他变量,如i,j,newSize等,空间复杂度为O(1);综上,总空间复杂度为O(n);

三、相关算法题目

54. 替换数字

54. 替换数字(第八期模拟笔试) (kamacoder.com)

import java.util.Scanner;

public class Main{
    public static String replaceNumber(String s){
        int count = 0;//统计数字的个数
        int OldIndex = s.length() - 1;//旧数组的末端
        for(int i = 0;i < s.length();i++){
            if(Character.isDigit(s.charAt(i))){
                count++;
            }
        }//统计数字个数
        //扩充数组
        char[] newS = new char[s.length() + count * 5];
        int NewIndex = newS.length - 1;//新数组的末端
        //将原数组中的元素复制到新数组
        for(int i = 0;i <= OldIndex;i++){
            newS[i] = s.charAt(i);
        }
        //将数组中的数字替换成 number
        for(int i = OldIndex, j = NewIndex;i >= 0;i--){
            if(newS[i] >= '0' && newS[i] <= '9'){
                newS[j--] = 'r';
                newS[j--] = 'e';
                newS[j--] = 'b';
                newS[j--] = 'm';
                newS[j--] = 'u';
                newS[j--] = 'n';
            }else{
                newS[j--] = newS[i];
            }
        }
        return new String(newS);
    };
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        System.out.println(replaceNumber(s));
        sc.close();
    }
}

四、相关知识点

1. Java 中数组复制

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

arraycopy是静态方法,可以直接通过类名调用,不需要创建对象。

参数说明:

  1. src:源数组,即要复制的数组。可以是任意类型的数(如 char[]int[]Object[] 等)。

  2. srcPos:源数组的起始位置(索引),从该位置开始复制。

  3. dest:目标数组,即要将数据复制到的数组。

  4. destPos:目标数组的起始位置(索引),从该位置开始存放复制的数据。

  5. length:要复制的元素数量。

无返回值,直接修改目标数组;

2.String的注意点

String是java定义好的一个类,定义在java.lang包中,所以使用时不需要导包;

字符串的内容是不会发生改变的,它的对象在创建后不能被更改;

每次修改字符串时,都会创建一个新的字符串对象,原来的字符串内容并不会改变;

修改字符串的方式:

(1)使用StringBuilder 或者StringBuffer;(一个可变的字符序列)

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 修改 StringBuilder 对象
String result = sb.toString(); // 转换为不可变的 String
System.out.println(result); // 输出: Hello World

(2)创建新的字符串

每次修改字符串时,都会创建一个新的字符串对象。

String s = "Hello";
s = s + " World"; // 创建了一个新的字符串对象
System.out.println(s); // 输出: Hello World

(3)使用字符数组

将字符串转换为字符数组(char[]),修改数组后再转换回字符串。

char[] chars = "Hello".toCharArray();
chars[0] = 'h'; // 修改字符数组
String result = new String(chars);
System.out.println(result); // 输出: hello

相关文章:

  • 基于 LangChain 实现数据库问答机器人
  • CUDA Toolkit 历史版本 cuda安装
  • C++ Qt项目教程:WebServer网络测试工具
  • C++ Primer 构造函数再探
  • 深入HBase——数据结构与算法
  • POI pptx转图片
  • Python 库自制 Cross-correlation 算法(当采样点已经1 对 1 匹配)
  • 2025-2-19学习笔记 : this关键字,constructor结构体,class类
  • 洛谷 P2234 [HNOI2002] 营业额统计(详解)c++
  • 2025软件测试就业形势剖析:机遇与挑战交织
  • 深入探讨优先队列:原理、实现与应用
  • 用deepseek学大模型05逻辑回归
  • 力扣每日一题【算法学习day.129】
  • SpringBoot启动失败之application.yml缩进没写好
  • 学习kafka和flink
  • 从零搭建微服务项目Base(第7章——微服务网关模块基础实现)
  • 硬核技术组合!用 DeepSeek R1、Ollama、Docker、RAGFlow 打造专属本地知识库
  • zyNo.25
  • 卷积神经网络之AlexNet经典神经网络,实现手写数字0~9识别
  • 鸿蒙NEXT开发-网络管理
  • 受美关税影响,本田预计新财年净利下降七成,并推迟加拿大建厂计划
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 汉斯·季默:不会指挥的声音工程师终成音乐“大神”
  • 一生要出片的年轻人,买爆相机
  • 海航回应“男团粉丝为追星堵住机舱通道”:已紧急阻止
  • 习近平圆满结束对俄罗斯国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典