nyoj_37 回文字符串

来源:互联网 发布:cecs钢结构绘图软件 编辑:程序博客网 时间:2024/06/06 04:52

原题链接》》》


解法描述:
输入字符串为s,将s逆置存到s1,然后求出s与s1的最长公共子序列(dp),最后用s长度len-dp,所得即为所求!!!

求最长公共子序列的算法》》》


#include<stdio.h>#include<string.h>char s[1005];int dp[1005][1005];void str_ver(char str[],char str1[]){    int len=strlen(str);    int j=0;    for(int i=len-1;i>=0;i--){        str1[j++]=str[i];    }    str1[j]='\0';}int Max(int a,int b){    return a>b?a:b;}int main(){    int N;    scanf("%d",&N);    while(N--){        scanf("%s",s);        int len=strlen(s);        memset(dp,0,sizeof(dp));        char s1[1005];        str_ver(s,s1);        //规划求最长子序列!        for(int i=0;i<len;i++){            for(int j=0;j<len;j++){                if(s[i]==s1[j]){                    dp[i+1][j+1]=dp[i][j]+1;                }else{                    dp[i+1][j+1]=Max(dp[i][j+1],dp[i+1][j]);                }            }        }         printf("%d\n",len-dp[len][len]);    }    return 0;}
0 0