मुझे उन समाधानों से अवगत है जो ओ (एन^2) में इस समस्या को हल करने के लिए नीचे गतिशील प्रोग्रामिंग दृष्टिकोण का उपयोग करते हैं। मैं विशेष रूप से शीर्ष नीचे डीपी दृष्टिकोण की तलाश में हूं। क्या एक पुनरावर्ती समाधान का उपयोग करके सबसे लंबे समय तक पैलिंड्रोमिक सबस्ट्रिंग प्राप्त करना संभव है?सबसे लंबा पालिंड्रोमिक सबस्ट्रिंग रिकर्सिव समाधान
यहां मैंने जो कोशिश की है, लेकिन यह कुछ मामलों के लिए विफल रहता है, लेकिन मुझे लगता है कि मैं लगभग सही रास्ते पर हूं।
#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;
}
बग अगर (ret! = 0) {ret = val + ret; ret ret;} लाइन, इसे हटाएं और उत्तर देखें। छोटे इनपुट और मैन्युअल रूप से जांचें। जोड़ें अगर (ret! = 0) वापसी वैल + ret; – Dharmesh