算法:替换数字
题目描述
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
输入描述
输入一个字符串 s,s 仅包含小写字母和数字字符。
输出描述
打印一个新的字符串,其中每个数字字符都被替换为了number
输入示例
a1b2c3
输出示例
anumberbnumbercnumber
方法1
public class ReplaceDigits {
public static String replaceDigitsWithNumber(String s) {
// 使用StringBuilder来构建最终的结果字符串
StringBuilder result = new StringBuilder();
// 遍历字符串中的每一个字符
for (char c : s.toCharArray()) {
// 判断当前字符是否是数字字符
if (Character.isDigit(c)) {
// 如果是数字,则替换为"number"
result.append("number");
} else {
// 如果是字母字符,则保持不变,直接添加到结果中
result.append(c);
}
}
// 返回构建好的字符串
return result.toString();
}
public static void main(String[] args) {
// 测试用例
String input = "a1b2c3";
String output = replaceDigitsWithNumber(input);
System.out.println(output); // 输出应为 "anumberbnumbercnumber"
}
}
方法2
不使用额外空间
- 不使用额外空间:通过原地修改字符数组来处理字符串。
- 从后往前遍历:为了避免覆盖未处理的字符,我们从字符串的末尾开始遍历,并在新的数组中从末尾插入。
- 空间优化:因为数字替换成了"number",一个数字占1个字符,替换后是6个字符,所以需要计算最终字符数组的大小,并进行替换。
输出: 输入 "a1b2c3"
,最终输出为 "anumberbnumbercnumber"
。
import java.util.Scanner;
public class ReplaceDigitsInPlace {
// 定义替换函数
public static String replaceDigitsWithNumber(String s) {
// 将字符串转换为字符数组
char[] chars = s.toCharArray();
// 计算最终字符串的长度 (每个数字字符会被替换成 6 个字符 "number")
int numberCount = 0;
for (char c : chars) {
if (Character.isDigit(c)) {
numberCount++;
}
}
// 如果没有数字字符,直接返回原字符串
if (numberCount == 0) {
return s;
}
// 创建一个新的字符数组,大小为原始长度 + 替换部分的长度差
char[] newChars = new char[chars.length + numberCount * 5]; // 每个数字增加 5 个字符
// 从后向前遍历,进行替换(从新数组的最后一位开始填充)
int j = newChars.length - 1;
for (int i = chars.length - 1; i >= 0; i--) {
if (Character.isDigit(chars[i])) {
// 替换数字为 "number"
newChars[j--] = 'r';
newChars[j--] = 'e';
newChars[j--] = 'b';
newChars[j--] = 'm';
newChars[j--] = 'u';
newChars[j--] = 'n';
} else {
// 非数字字符直接复制
newChars[j--] = chars[i];
}
}
// 将字符数组转换为字符串并返回
return new String(newChars);
}
public static void main(String[] args) {
// 使用 Scanner 接收键盘输入
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个包含字母和数字的字符串: ");
String input = scanner.nextLine();
// 调用函数并输出结果
String output = replaceDigitsWithNumber(input);
System.out.println("转换后的字符串: " + output);
}
}
原文地址:https://blog.csdn.net/m0_67281369/article/details/142412554
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!