再帰を使用して、Javaで大きな文字列の部分文字列の出現を数える必要があります。私は再帰のアイデアを得るが、私はこのような問題にどのように適用されるのか分からない。誰もこれを行う方法を知っていますか?再帰を使用してJavaで部分文字列の出現を数えるにはどうすればよいですか?
私にも同様の問題がたくさんあります。再帰的に一般的な問題を解決するためのアドバイス?私の最大の関心事は基本事例を見つけることです。
ありがとうございます!
再帰を使用して、Javaで大きな文字列の部分文字列の出現を数える必要があります。私は再帰のアイデアを得るが、私はこのような問題にどのように適用されるのか分からない。誰もこれを行う方法を知っていますか?再帰を使用してJavaで部分文字列の出現を数えるにはどうすればよいですか?
私にも同様の問題がたくさんあります。再帰的に一般的な問題を解決するためのアドバイス?私の最大の関心事は基本事例を見つけることです。
ありがとうございます!
本当に一般的な方法はありませんが、私はそうは考えていません。しかし、ここで私はこの問題のためにそれをやっています:
あなたは実際に再帰(Javaでは、少なくとも)を使ってこの問題を解決しません。あなたはこのような何かを書きたい:うまくいけば、あなたはループと再帰的なアプローチの間の共通性を見ることができます
int countOccurrences(String str, String search) {
return recurse(str, search, 0, 0);
}
int recurse(String str, String search, int count, int i) {
i = str.indexOf(search, i);
if (i == -1) {
// Like the while loop where i == -1, i.e. no more occurrences found.
// Break the recursion.
return count;
} else {
// Like the while loop where i != -1: an occurrence was found.
// Increment count, and keep on searching.
return recurse(str, search, count + 1, i + search.length());
}
}
:
int countOccurrences(String str, String search) {
int count = 0;
int i = 0;
while (true) {
i = str.indexOf(search, i);
if (i == -1) {
break;
} else {
count += 1;
i += search.length();
}
}
return count;
}
だから、あなたは、末尾再帰などのようなものを、これを書き換えることができます。あなたは尾再帰を記述する必要はありません
注:recurse
メソッドからcount
パラメータを落とし、非端子ケースを作ることによって非末尾再帰を書き込むことができます。
return 1 + recurse(str, search, i + search.length());
テールコールの最適化を実行しないJavaではあまり違いはありませんが、テール再帰形式は他の言語ではより効率的です(上記のようにループに戻すことができます) 。
私は特定の文字列しか与えられていませんでしたが、あなたの順応したメソッドはそのトリックでした。私の他の問題のアドバイスはありますか? –
あなたが言ったことは、「私にも同様の問題がたくさんあります」ということを考えれば、同様の方法論を適用するといいでしょう。最初にループとして書いておき、それに基づいて再帰に翻訳しようとします。 –
再帰的に解くのではなく、ループを使用してこの問題が発生した場合は、ループとして書き出し、それを末尾再帰に変換する方法を考えてください。 –
@AndyTurner私は再帰を使用する必要があります。のように、ベースケースと再帰的なステップが必要です。 –
部分文字列パターンが与えられていて、その文字列の出現回数を数えますか?または、すべての部分文字列パターンを見つけて数えなければなりませんか? –