Проблема, над которой я работаю, находится здесь: 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 для всех тестовых случаев.
String first = longestCommonSubsequence(a, b.substring(1))
продолжает работать и обрезает буквы из строки b, пока она не станет пустой. И тогда возвращается пустая строка. - person Amber   schedule 22.11.2016a.substring(0, 1) == b.substring(0, 1)
всегда будет ложным. - person azurefrog   schedule 22.11.2016