思路:
思路:利用枚举回文串的起点和终点,然后判断他是否是回文字符串。【注释:fgets:从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个\0,所以它是读一行数据)】
代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cctype> #include<cstring> #define N 50050 using namespace std; char buf[N],s[N]; char p[N]; 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-1; i++) if(isalpha(buf[i])) { p[m]=i; s[m++]=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(max<2*j+1) { max=2*j+1; x=p[i-j]; y=p[i+j]; } } for(j=0;-j>0&&i+j+1<m;j++) { if(s[i-j]!=s[i+j+1]) break; if(max<2*j+2) { max=2*j+2; x=p[i-j]; y=p[i+j+1]; } } } for(i=x;i<=y;i++) cout<<buf[i]; cout<<endl; return 0; }