算法竞赛_最长回文子串(含特殊符号输出)_C++

来源:互联网 发布:自动化控制软件 编辑:程序博客网 时间:2024/06/16 06:31

样例输入:

Confuciuss say: Madam, I'm Adam.

样例输出:

Madam,I'm Adam

说明:
枚举回文串的中间位置i, 然后不断往外扩展,直到有字符不同。
长度为奇数和偶数的处理不同。
使用了fgets()函数读取完整的一行。

#include <bits/stdc++.h>#define MAXN 5000+10using namespace std;char buf[MAXN], s[MAXN];int p[MAXN];int main(){    int n,m=0, max=0, x, y;    int i,j;    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 > 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(j*2+2 > max){                max = j*2+2;                x=p[i-j];                y=p[i+j+1];            }        }    }    for(i=x;i<=y;i++)        printf("%c", buf[i]);    printf("\n");    return 0;}