Проблемы я работаю здесь: 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 каждый"
" Марти», "Helene" ""
"", "Джо" ""
"Сюзи", "" ""
"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