gpt4 book ai didi

java - 在字符串中递归地将 pi 替换为 3.14(无循环)

转载 作者:行者123 更新时间:2023-12-02 01:57:09 25 4
gpt4 key购买 nike

给定一个字符串,递归(无循环)计算一个新字符串,其中所有出现的“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);

}

最佳答案

使用相同的机制,您可以使用StringBuilder并就地修改它。这应该会提高内存效率。

private static final String PI = "pi";
private static final String THREE_POINT_ONE_FOUR = "3.14";

public String changePi(String s) {
// Work with a StringBuilder for efficiency.
StringBuilder sb = new StringBuilder(s);
// Start replacement at 0.
return changePi(sb, 0).toString();
}

private StringBuilder changePi(StringBuilder sb, int i) {
// Long enough?
if (i + PI.length() <= sb.length()) {
// Is it there?
if (sb.subSequence(i, i + PI.length()).equals(PI)) {
// Yes! - Replace it and recurse.
sb.replace(i, i + PI.length(), THREE_POINT_ONE_FOUR);
return changePi(sb, i + THREE_POINT_ONE_FOUR.length());
} else {
// Not there - step to next.
return changePi(sb, i + 1);
}
}
return sb;
}

private void test(String s) {
System.out.println(s + " -> " + changePi(s));
}

private void test() {
test("pipi");
test("xpix");
test("pip");
}

关于java - 在字符串中递归地将 pi 替换为 3.14(无循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com