Использование самого длинного общего подстрокового решения для решения самой длинной палиндромной подстроки
Я пытался решить проблему самой длинной палиндромной подстроки, используя самую длинную общую подстроку, перевернув основную строку. Но мой алгоритм не работает на следующих примерах:
"abadefdaba" ожидаемый результат: аба, но я получаю вывод как абада.
Кажется, мне не хватает некоторых условий в моей программе:
string longestPalindrome(string A)
{
int **dp = new int*[A.length()+1];
for(int i=0;i<=A.length();i++)
dp[i] = new int[A.length()];
string B = A;
reverse(B.begin(), B.end());
int res = INT_MIN;
int max_i = INT_MIN;
for(int i=0;i<= A.length();i++)
{
for(int j=0;j<=A.length();j++)
{
if(i==0 || j==0)
dp[i][j] = 0;
else if(A[i-1] != B[j-1])
dp[i][j] = 0;
else
{
dp[i][j] = 1 + dp[i-1][j-1];
if(dp[i][j] > res)
{
res = dp[i][j];
max_i = i;
}
}
}
}
return A.substr(max_i-res,res);
}