uva11151

来源:互联网 发布:g3开票软件 编辑:程序博客网 时间:2024/06/15 21:21

题目大意:
求出最长的回文串

思路:
求字符串正序和逆序的最长公共子序列就是最长的回文串。
注意:空串也是一个回文串
代码:

#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;}
0 0
原创粉丝点击