私はこのCodingBat再帰の問題で立ち往生しています:
文字列を指定すると、同じである隣接する文字が1つの文字に縮小された「クリーンな」文字列を再帰的に返します。したがって、「yyzzza」は「yza」を生成します。
stringClean("yyzzza") → "yza"
stringClean("abbbcdd") → "abcd"
stringClean("Hello") → "Helo"
ループを使用して解決できますが、問題は再帰を使用して解決されると想定されているため、これは許可されていません。ループを使用せず、再帰のみを使用してこの問題を解決する方法はありますか?グローバル変数もループもありません。パラメータにいくつかの情報をエンコードすることも考えましたが、それも不正行為だと思います。
以前のプログラムにはwhileループがなく、正解の半分しか得られませんでした。基本的に、文字列パラメーターを使用して関数を呼び出すと、最初の2文字をチェックしました。それらが同じである場合、文字を返し、2文字小さい文字列を使用して関数を再度呼び出します。ただし、同じ連続する文字の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) );
}