代码随想录刷题day23|(字符串篇)54.替换数字
- 创业
- 2025-08-27 12:57:02

目录
一、题目思路
二、复杂度分析
三、相关算法题目
四、相关知识点
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 )
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是静态方法,可以直接通过类名调用,不需要创建对象。
参数说明:
src:源数组,即要复制的数组。可以是任意类型的数(如 char[], int[], Object[] 等)。
srcPos:源数组的起始位置(索引),从该位置开始复制。
dest:目标数组,即要将数据复制到的数组。
destPos:目标数组的起始位置(索引),从该位置开始存放复制的数据。
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代码随想录刷题day23|(字符串篇)54.替换数字由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“代码随想录刷题day23|(字符串篇)54.替换数字”