题目的意思就是给出一个字符串,找去其中最长的回文子串.
用f[i][j]表示i到j内最长的回文串多长.
注意的是可能有空格.
AC代码:
#include<stdio.h>
#include<string.h>
const int N = 1000;
char str[N];
int f[N][N];
int dp(int l , int r) {
if(f[l][r] != -1)
return f[l][r];
if(l == r)
return 1;
if(l > r)
return 0;
int res;
if(str[l] == str[r])
res = dp(l + 1 , r - 1) + 2;
else {
int a = dp(l + 1 , r);
int b = dp(l , r - 1);
res = a > b ? a : b;
}
f[l][r] = res;
return res;
}
int main () {
int t;
scanf("%d",&t);
getchar();
while(t--) {
memset(f , -1 ,sizeof(f));
gets(str);
int len = strlen(str);
printf("%d\n",dp(0 , len - 1));
}
}