#include <stdio.h>
#include <string.h>
//动态规划解法
int main(void)
{
char s[1000];
while(scanf("%s",&s) != EOF)
{
int i, j;
int len = strlen(s);
//dp[i][j]表示s[i]到s[j]是不是回文串,是等于1,不是等于0;
int dp[len][len];
int maxlen = 1;
// 特殊情况处理
if(len<2)
{
printf("1\n");
}
// 边界条件处理,
for(i=0;i<len; i++)
{
dp[i][i] = 1;
}
for(j=1; j<len; j++)
{
for(i=0; i<j; i++)
{
if(s[i] != s[j])
{
dp[i][j] = 0;
}
else
{
if(j-i < 3)
{
dp[i][j] = 1;
}
else
{
dp[i][j] = dp[i+1][j-1];
}
}
{
maxlen = j-i+1;
}
}
}
printf("%d\n",maxlen);
}
return 0;
}
#include <string.h>
//动态规划解法
int main(void)
{
char s[1000];
while(scanf("%s",&s) != EOF)
{
int i, j;
int len = strlen(s);
//dp[i][j]表示s[i]到s[j]是不是回文串,是等于1,不是等于0;
int dp[len][len];
int maxlen = 1;
// 特殊情况处理
if(len<2)
{
printf("1\n");
}
// 边界条件处理,
for(i=0;i<len; i++)
{
dp[i][i] = 1;
}
for(j=1; j<len; j++)
{
for(i=0; i<j; i++)
{
if(s[i] != s[j])
{
dp[i][j] = 0;
}
else
{
if(j-i < 3)
{
dp[i][j] = 1;
}
else
{
dp[i][j] = dp[i+1][j-1];
}
}
//dp[i][j]等于1时,代表回文串s[i-j]成立,若此时回文串长度大于原本记录的最大长度,及时更新最大长度
if(dp[i][j] && j-i+1>maxlen){
maxlen = j-i+1;
}
}
}
printf("%d\n",maxlen);
}
return 0;
}