Bu sorunu çözmek için aşağıdan yukarıya dinamik programlama yaklaşımı kullanan çözümlerden haberdarım O (n^2). Özellikle yukarıdan aşağıya bir dp yaklaşımı arıyorum. Yinelemeli bir çözüm kullanarak en uzun palindromik substring elde etmek mümkün mü?en uzun palindromik alt dizgi özyinelemeli çözüm
İşte denedim ama bazı durumlarda başarısız oluyor, ama neredeyse doğru yolda olduğumu hissediyorum. Bu durum için
#include <iostream>
#include <string>
using namespace std;
string S;
int dp[55][55];
int solve(int x,int y,int val)
{
if(x>y)return val;
int &ret = dp[x][y];
if(ret!=0){ret = val + ret;return ret;}
//cout<<"x: "<<x<<" y: "<<y<<" val: "<<val<<endl;
if(S[x] == S[y])
ret = solve(x+1,y-1,val+2 - (x==y));
else
ret = max(solve(x+1,y,0),solve(x,y-1,0));
return ret;
}
int main()
{
cin >> S;
memset(dp,0,sizeof(dp));
int num = solve(0,S.size()-1,0);
cout<<num<<endl;
}
Hata de eğer (ret! = 0) {ret = val + ret; ret;}} satırını kaldırın, kaldırın ve ans'i görün. Küçük giriş ve manuel kontrol edin. Ekle (ret! = 0) val + ret döndürün; – Dharmesh