我正在处理的问题在这里: http: //practiceit.cs.washington.edu/problem/view/cs2/sections/recursivebacktracking/longestCommonSubsequence
基本上我们得到了两个字符串,我们被要求找到最长的公共子序列。我在网上搜索了解决方案并将它们与我自己的解决方案进行了比较,但我在我的代码中找不到任何错误。我想知道为什么它仍然不起作用。
而且,我被要求通过使用递归方法来解决这个问题
这是我的代码:
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”
“她卖”、“贝壳”、“卖”
“12345”、“54321 21 54321”、“123”
《白眼老师》、《好吃的桃子》、《各显神通》
“马蒂”、“海伦”“”
"","乔" ""
“苏西”、“”“”
“ACGGTGTCGTGCTA”、“CGTTCGGCTATCGTACGT”、“CGGTTCGTGT”
使用我的代码,我得到了所有测试用例的 StackOverFlow。