私が働いている問題はここにある: http://practiceit.cs.washington.edu/problem/view/cs2/sections/recursivebacktracking/longestCommonSubsequence最長共通部分列のJava(再帰的)
基本的に我々は2つの文字列を与えていると我々は最長共通部分列を見つけるように要求されています。私はソリューションをオンラインで検索し、自分のソリューションと比較しました。私のコードにはバグは見つかりませんでした。私はなぜそれがまだ動作しないのだろうかと思います。
コール値が返さ
:ここpublic static String longestCommonSubsequence(String a, String b){
if(a.isEmpty() || b.isEmpty()){
return "";
}
if (a.substring(a.length() - 1).equals(b.substring(b.length() - 1))){
return longestCommonSubsequence(a.substring(0, a.length() - 1), b.substring(0, b.length()
- 1)) + a.substring(a.length() - 1);
} else {
String first = longestCommonSubsequence(a, b.substring(b.length() - 1));
String second = longestCommonSubsequence(a.substring(a.length() - 1), b);
if(first.length() > second.length()){
return first;
}
return second;
}
}
とは、すべてのテストケースです:
そしてまた、私は再帰的な方法ここで
を使用することで、この問題を解決するために要求されたが、私のコードです「ABCDEFG」「BGCEHAF」「BCEF」
"彼女が販売している"、 "貝殻" "sesells"
"12345"、 "54321 21 54321" "123"
"supercilious先生"、 "おいしい桃" "eciousそれぞれ"
」マーティ "
""、 "ジョー"」、 "ヘレン"" ""
"スージー"、 "" ""
"ACGGTGTCGTGCTA"、 "CGTTCGGCTATCGTACGT" "CGGTTCGTGT"
私のコード私はすべてのテストケースでStackOverFlowを取得しました。
DPベースのソリューションを使用する利点は、実行時間です。 – iNan
しかし私が得た結果は空の文字列です。私はデバッグを試み、文字列 'String first = longestCommonSubsequence(a、b.substring(1))'が実行され続け、文字列bが空になるまで文字を切り捨てることに気づいた。そして、空のStringが返されます。 – Amber
[Javaの文字列を比較するにはどうすればよいですか?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – azurefrog