我工作的问题是在这里: http://practiceit.cs.washington.edu/problem/view/cs2/sections/recursivebacktracking/longestCommonSubsequence最长公共子序列的Java(递归)
基本上我们给出两个字符串,我们被要求寻找最长公共子。我在网上搜索了解决方案,并将它们与我自己的解决方案进行了比较,并且在代码中找不到任何错误。我想知道为什么它仍然无法工作。
并且还,要求我用递归方法
这里来解决这个问题是我的代码:
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”
“白眼教师”, “美味的桃子”, “ecious每个”
“君子好逑”, “海伦” “”
“”, “乔” “”
“苏茜”, “”, “”
“ACGGTGTCGTGCTA”, “CGTTCGGCTATCGTACGT” “CGGTTCGTGT”
用我的代码我得到了所有测试用例的StackOverFlow。
它可能工作。使用基于DP的解决方案的优势在于运行时间。 – iNan
但我得到的结果只是一个空字符串。我试过调试并注意到'String first = longestCommonSubsequence(a,b.substring(1))'这一行继续运行并切断了字符串b中的字母直到它为空。然后返回一个空字符串。 – Amber
可能的重复[如何比较Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – azurefrog