[Leetcode 5 ]на самом деле не могу найти, что не так в моем решении для самой длинной проблемы подстроки палиндрома
input: babad abbd output: ad bb expected: bab bb
#include<iostream> using namespace std; class Solution { public: string longestPalindrome(string s) { int maxlength=1; bool ispalindromic[1000][1000]={false}; for(int i=0;i<s.length();i++) ispalindromic[i][i]=1; for(int l=2;l<s.length();l++){ for(int i=0;i<s.length()-1; i++){ int j=i+l-1; if(l==2&&s[i]==s[j]){ ispalindromic[i][j]=1; maxlength=max(maxlength,j-i+1); continue;} if(ispalindromic[i+1][j-1]&&s[i]==s[j]){ ispalindromic[i][j]=1; maxlength=max(maxlength,j-i+1); } }} for(int i=0;i<s.length();i++){ int j=i+maxlength-1; if(ispalindromic[i][j]){ return s.substr(i,j); } } return s.substr(0,1); } };
Что я уже пробовал:
Сначала я создал ispalindromic[1000][1000] и убедился, что каждый алфавит сам по себе является палиндромным. Затем я проверяю палиндром от длины 2 и так далее. Всякий раз, когда ispalindromic становится истинным, код обновляет maxlength, так что в конце концов код может просто использовать maxlength для печати самого длинного палиндрома.
I also added cout<<j<<endl; to see whether it's j's fault. if i input abbd, j is 2 which is right, and program prints right answer bb, but if I input acddc, j is still right(3), but the program prints ddc which is wrong. if(ispalindromic[i][j]){ cout<<j<<endl; return s.substr(i,j); }