最长回文串

来源:互联网 发布:中世纪欧洲 知乎 编辑:程序博客网 时间:2024/05/21 07:55
/*最长回文串*/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXN 5000+10
char buf[MAXN],s[MAXN];
int p[MAXN];
using namespace std;
void huiwen()
{
    int n,m=0,max=0,b=0,e=0;
    fgets(buf,sizeof(s),stdin);
    //cout<<"n1"<<n<<endl;
    n=strlen(buf);
    //cout<<"n2"<<n<<endl;
    for(int i=0;i<n;i++)
    {
        if(isalpha(buf[i]))
        {
            p[m]=i;
            s[m++]=toupper(buf[i]);
        }
    }
    //判断回文
    for(int i=0;i<m;i++)
    {
        for(int j=i;j<m;j++)
        {
            int ok=1;
            for(int k=i;k<j;k++)
            {
               if(s[k]!=s[j+i-k])
               {
                   ok=0;
               }
               if(ok&&j-k+1>max)
                {
                    max=j-k+1;
                    b=i;
                    e=j;
                }
            }
        }
    }
    cout<<"最长回文串长度为"<<max<<endl;
    for(int i=b;i<=e;i++)
    {
        cout<<buf[p[i]];
    }
}
int main()
{
    huiwen();
    return 0;
}
原创粉丝点击