3 回答

TA貢獻1796條經(jīng)驗 獲得超4個贊
您的解決方案需要一個小調(diào)整 - 當您找到 ap和i在一起時,您正確地向前跳過 2 個字符以查看字符串的其余部分 - 您正在使用return "3.14" + changePi(str.substring(2));.
但是,當您沒有找到和p在一起i時,您需要更改邏輯以僅向前跳過一個字符而不是兩個字符。所以代替這個:
return c1 + c2+ changePi(str.substring(2));
做這個:
return c1 + changePi(str.substring(1));
進行更改后,我得到以下輸出(使用您的每個輸入),該輸出與您的預期輸出相匹配:
x3.14x
3.143.14
3.14p
3.14
hip
p
x
3.14xx
xyzzy

TA貢獻1824條經(jīng)驗 獲得超5個贊
這里有幾個解決該問題的方法。第二種和你的方法類似。在第一個中,我最初包含了目標替換文本,因此我需要確定其長度。因此,"pi".length()我決定將其保留下來。
public static void main(String[] args) {
String[] tests = {
"piabcpiefgpi", "xxxxxxpix", "xpix", "pip", "3.14", "3.14p",
"hip", "p", "x", "", "pixx", "xyzzy"
};
for (String t : tests) {
System.out.println(t + " --> " + replaceV2(t));
}
}
public static String replaceV1(String a) {
int i = a.indexOf("pi");
if (i < 0) {
return a;
}
return replaceV1(
a.substring(0, i) + "3.14" + a.substring(i + "pi".length()));
}
public static String replaceV2(String a) {
if (a.length() < 2) {
return a;
}
if (a.startsWith("pi")) {
a = "3.14" + replaceV2(a.substring(2));
}
return a.substring(0, 1) + replaceV2(a.substring(1));
}
}
他們都打印以下內(nèi)容。
piabcpiefgpi --> 3.14abc3.14efg3.14
xxxxxxpix --> xxxxxx3.14x
xpix --> x3.14x
pip --> 3.14p
3.14 --> 3.14
3.14p --> 3.14p
hip --> hip
p --> p
x --> x
-->
pixx --> 3.14xx
xyzzy --> xyzzy

TA貢獻1856條經(jīng)驗 獲得超5個贊
''' change pi to 3.14 python code'''
def changePi(s):
if len(s) == 2 and s == 'pi' : return '3.14'
if len(s) <= 2 : return s
chars , sub = s[0:2] , s[1:]
if chars == 'pi':
chars = '3.14'
sub = sub[1:]
else: chars = chars[0]
return chars + changePi(sub)
print changePi("xpix")
print changePi("pipi")
print changePi("pip")
添加回答
舉報