我卡在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));
}
是的,只用递归就可以解决这个问题。我会给你提示,你应该创建一个辅助方法,它有两个参数:前一个字符和剩余的字符串。 –