我卡在this CodingBat遞歸問題:這可以只用遞歸完成嗎?
給定一個字符串,返回遞歸一個「乾淨」的字符串,其中屬於同一相鄰字符已經減少爲單個字符。所以「yyzzza」產生「yza」。
stringClean("yyzzza") → "yza"
stringClean("abbbcdd") → "abcd"
stringClean("Hello") → "Helo"
我可以使用循環解決這個問題,但這是不允許的,因爲這個問題應該這樣來使用遞歸解決。有沒有辦法解決這個問題,而不使用循環,只使用遞歸?沒有全局變量,沒有循環。我甚至想過在參數中編碼一些信息,但我認爲這也會作弊。
我以前的程序沒有while循環,我只能得到一半的答案。基本上,當我用字符串參數調用我的函數時,我檢查了前兩個字符。如果它們是相同的,我會返回字符並再次用一個小於兩個字符的字符串調用該函數。然而,一串3或4個相同的連續字符總是會擊敗我的算法。
public String stringClean(String str) {
if (str.length() == 0)
return "";
if (str.length() > 1) {
int counter = 1;
char a = str.charAt(0);
char b = str.charAt(1);
if (a == b)
{
while (str.length() > 1)
{
a = str.charAt(0);
b = str.charAt(1);
if (a != b) break;
counter++;
str = str.substring(1);
}
return a + stringClean(str.substring(1)) ;
}
}
return str.charAt(0) + stringClean (str.substring(1));
}
是的,只用遞歸就可以解決這個問題。我會給你提示,你應該創建一個輔助方法,它有兩個參數:前一個字符和剩餘的字符串。 –