【代码随想录 字符串3.替换数字】
第一次自己写的,直接调用了库函数,但是直接调用库函数显得很傻逼且没有意义。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
s = s.replace("0", "number");
s = s.replace("1", "number");
s = s.replace("2", "number");
s = s.replace("3", "number");
s = s.replace("4", "number");
s = s.replace("5", "number");
s = s.replace("6", "number");
s = s.replace("7", "number");
s = s.replace("8", "number");
s = s.replace("9", "number");
System.out.println(s);
}
正解;
package code;
import code.Solution;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
char[] ch = s.toCharArray();
int len = ch.length;
for (int i = 0; i < ch.length; i++) {
if(ch[i] >='0' && ch[i] <= '9'){
len +=5;
}
}
char []res = new char[len];
int i = len -1;
for (int j = ch.length-1 ; j>=0 ; j--) {
if(ch[j]>='0' && ch[j]<='9'){
res [i--] ='r';
res [i--] ='e';
res [i--] ='b';
res [i--] ='m';
res [i--] ='u';
res [i--] ='n';
}else{
res[i--] = ch[j];
}
}
System.out.println(new String(res));
}
}
题解。
// 为了还原题目本意,先把原数组复制到扩展长度后的新数组,然后不再使用原数组、原地对新数组进行操作。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
len += 5;
}
}
char[] ret = new char[len];
for (int i = 0; i < s.length(); i++) {
ret[i] = s.charAt(i);
}
for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
if ('0' <= ret[i] && ret[i] <= '9') {
ret[j--] = 'r';
ret[j--] = 'e';
ret[j--] = 'b';
ret[j--] = 'm';
ret[j--] = 'u';
ret[j--] = 'n';
} else {
ret[j--] = ret[i];
}
}
System.out.println(ret);
}
}
由于字符串不方便进行定点删除,所以要转化到char数组来进行操作。
后面的遍历要从最后来进行,如果从前面进行也行。
但是题解的方法模拟了题意,题解中就不能从前面进行。