最长回文子串

来源:互联网 发布:mac os 创建文件夹 编辑:程序博客网 时间:2024/06/11 16:43
  • Description

输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。

  • Input

输入字符串长度不超过5000,且占据单独的一行。

  • Output

输出最长的回文串,如果有多个,输出起始位置最靠左的。

  • Sample Input

Confuciuss say: Madam,I?m Adam.

  • Sample Output

Madam, I?m Adam

#include<stdio.h>#include<string.h>int main(){    char a[5001],b[5001];int c[5001]={0};    int i,j=0,m,n,max=1,index1=0,index2=0,k=0,count=0;    gets(a);    for(i=0;a[i]!=0;i++)        if(isalpha(a[i])){c[j]=i;b[j++]=toupper(a[i]);}    b[j]=0;    n=strlen(b);    for(i=0;b[i]!=0;i++)    {        if(b[i]==b[i+1])        {    for(j=i-1,k=i+2;j>=0&&k<n;j--,k++)            if(b[j]!=b[k])break;        if(2*(i-j)>max)        {max=2*(i-j);index1=c[j+1];index2=c[k-1];}}        for(j=i-1,k=i+1;j>=0&&k<n;j--,k++)            if(b[j]!=b[k])break;        if(2*(i-j)-1>max)        {max=2*(i-j)-1;index1=c[j+1];index2=c[k-1];}    }    for(i=index1;i<=index2;i++)        printf("%c",a[i]);    puts("");    return 0;} 
0 0