2016.1.16(最长回文字符窜)

//最长回文子串
 #include<stdio.h>
 #include<math.h>
 #include<string.h>
 #include<stdlib.h>
 #include<ctype.h>
 #define MAX 5005
 char buf[MAX],s[MAX];
 int p[MAX];
 int main()
 {
    while(gets(buf))
    {
     int n,m=0,max1=0;
     int i,j,x,y;
    //  fgets(buf,sizeof(s),stdin);
    n=strlen(buf);
    for(i=0;i<n;i++)
        if(isalpha(buf[i]))  //判断是否为字符
        {
            p[m]=i;
            s[m++]=toupper(buf[i]);   //返回大写字母
        }
        for(i=0;i<m;i++)
        {
            for(j=0;i-j>=0&&i+j<m;j++)
            {
                if(s[i-j]!=s[i+j]) break;
                if(j*2+1>max1) {max1=j*2+1;x=p[i-j];y=p[i+j];}
            }
             for(j=0;i-j>=0&&i+j<m;j++)
            {
                if(s[i-j]!=s[i+j+1]) break;
                if(j*2+2>max1) {max1=j*2+2;x=p[i-j];y=p[i+j+1];}
            }
        }
        for(i=x;i<=y;i++)
            printf("%c",buf[i]);
        printf("
");
    }
    return 0;
 }
原文地址:https://www.cnblogs.com/csustwj/p/5135403.html