题目大意:
求出最长的回文串
思路:
求字符串正序和逆序的最长公共子序列就是最长的回文串。
注意:空串也是一个回文串
代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
char s1[1005];
char s2[1005];
int dp[1005][1005];
int main() {
int T;
scanf("%d",&T);
getchar();
while(T--) {
//gets(s1);
if(gets(s1) == NULL) {
printf("1\n");
continue;
}
int l = strlen(s1);
for(int i = 0; i < l; i++)
s2[l - i - 1] = s1[i];
memset(dp,0,sizeof(dp));
for(int i = 1; i <= l; i++) {
for(int j = 1; j <= l; j++)
if(s1[i - 1] == s2[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else {
dp[i][j] = max(dp[i - 1][j],dp[i][j - 1]);
}
}
printf("%d\n",dp[l][l]);
}
return 0;
}