java - 递归地用字符串中的 3.14 替换 pi(无循环)
问题描述
给定一个字符串,递归(无循环)计算一个新字符串,其中所有出现的“pi”都已替换为“3.14”。
changePi("xpix") → "x3.14x"
changePi("pipi") → "3.143.14"
changePi("pip") → "3.14p"
我的代码工作得很好,但是有没有其他方法(只有递归没有循环)来解决这个问题而不必创建一个新的字符串 str2 ?
提前谢谢你
这是我的代码:
public String changePi(String str) {
String str2 = "";
return changePi(str, str2);
}
public String changePi(String str, String str2) {
if (str.length() == 0)
return str2;
else {
if (str.endsWith("pi")) {
str2 = 3.14 + str2;
return changePi(str.substring(0, str.length() - 2), str2);
} else
str2 = str.charAt(str.length() - 1) + str2;
}
return changePi(str.substring(0, str.length() - 1), str2);
}
解决方案
您正在犯与上一个问题中相同的错误。此外,我更愿意检查一个字符串是否以字符串开头,而不是以字符串结尾...我假设您想要一些您可以理解并且易于解释的东西。
- 你能匹配“pi”还是字符串已经小于长度(“pi”)符号 -> 不能做太多所以返回它。
- 它是否以“pi”开头?如果是这样,则返回与字符串的其余部分连接的替换(只是其余从第 0 个索引开始的length("pi")个字符...
- 如果它不是以“pi”开头,则将第一个字符与changePi的输出连接起来,并将字符串的其余部分作为输入。
public static String changePi(String str) {
if (str.length() < "pi".length()) {
return str;
}
if (str.startsWith("pi")) {
return "3.14" + changePi(str.substring("pi".length(), str.length()));
}
return str.charAt(0) + changePi(str.substring(1, str.length()));
}
而且,如果您仍然喜欢使用“endsWith”逻辑,那么这里应用的算法相同。
public static String changePi(String str) {
if (str.length() < "pi".length()) {
return str;
}
if (str.endsWith("pi")) {
return changePi(str.substring(0, str.length() - "pi".length())) + "3.14";
}
return changePi(str.substring(0, str.length() - 1)) + str.charAt(str.length() - 1);
}
推荐阅读
- azure - 购买 Microsoft 365 后的下一步是什么?
- python - Mysql CONCAT 与 peewee
- python-2.7 - 'curl' 不是内部或外部命令、可运行程序或批处理文件
- laravel - 如何在我的电子邮件降价标头中放置图像?
- ansible - 更改文件夹及其内容的权限
- python - 将长长的一行json文件拆分成多行
- c# - C# 仅在需要时有条件地处理实体框架 DbContext
- java - Java NIO 2 中的多线程模型是什么——(Proactor 模式)?
- python - 散景:在散点图上使用框选后如何更新数据表?
- javascript - 有没有办法让这段代码更干净?