#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cctype> #include<cstring> #define INF 0x3f3f3f3f #define maxn 5000+10 using namespace std; char buf[maxn],s[maxn]; int main() { int n,m=0,maxx=0; int i,j,k; fgets(buf,maxn,stdin); n=strlen(buf); //n虽然包含\n 但是由于后面有if判断来筛选,当然你可以写i<n-1 for(i=0;i<n;i++) //预处理字符串 --!!!!--注意学习 if(isalpha(buf[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>maxx) maxx=j-i+1; } printf("maxx=%d",maxx); return 0; }
注意:对比 刘汝佳 最长回文字符串(2)<下一篇文章>