最长回文子串

/*最长回文子串*/
#include<iostream>
#include<string.h>
#include<ctype.h>
using namespace std;
#define Max 5000 +10
char buf[Max],s[Max];
int p[Max];
int main()
{
    int n,m=0,max=0;
    int i,j;
    //int k;
    int 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=i;j<m;j++)
            {
                int ok=1;
                for(k=i;k<=(i+j)/2;k++)
                    if(s[k]!=s[i+j-k])ok=0;
                if(ok&&j-i+1>max)
                    max=j-i+1;
            }枚举法*/
            for(j=0;i-j>0&&i+j<m;j++)
            {
                if(s[i-j]!=s[i+j])
                    break;
                if(2*j+1>max)
                {
                    max=j*2+1;x=p[i-j];y=p[i+j];
                }
            }//奇数
            for(j=0;i-j>0&&i+j+1<m;j++)
            {
                if(s[i-j]!=s[i+j+1])
                    break;
                if(2*j+2>max)
                {
                    max=j*2+2;x=p[i-j];y=p[i+j+1];
                }
            }//偶数
            //中间到两边法
        }
            printf("max= %d\n",max);
            for(i=x;i<=y;i++)
                printf("%c",buf[i]);
            printf("\n");
             return 0;
}
原文地址:https://www.cnblogs.com/heqinghui/p/2753482.html