#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 200;
int main() {
char str[MAXN];
int dp[MAXN][MAXN], res = 1; //dp[i][j]表示str[i]到str[j]是否是回文子串,是则为1
gets(str);
int len = strlen(str);
//边界
for(int i=0; i<len; i++) {
dp[i][i] = 1;
if(i < len - 1 && str[i] == str[i + 1]) {
dp[i][i + 1] = 1;
res = 2;
}
}
//状态转移方程
for(int l=3; l<=len; l++) { //枚举子串长度
for(int i=0; i+l-1<len; i++) { //枚举子串的起始端点
int j=i+l-1; //枚举子串的右端点
if(str[i] == str[j] && dp[i+1][j-1] == 1) {
dp[i][j] = 1;
res = l;
}
}
}
printf("%d\n",res);
return 0;
}
DP-最长回文子串
最新推荐文章于 2024-06-10 00:23:25 发布