ввод:
babad
abbd
вывод:
ad
bb
ожидается:
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]
и убедился, что каждый алфавит сам по себе является палиндромом c. Потом проверяю палиндроми c от длины 2 и так далее. Когда ispalindromic
становится истинным, код обновляет maxlength
, так что в конце код может просто использовать maxlength
для печати самого длинного палиндрома c.