您的位置:首页 > 其它

最长回文子串算法入门经典

2015-04-15 20:27 369 查看
#include<stdio.h>
#include<ctype.h>
#include<iostream>
#include<math.h>
#include<string.h>

#define MAXN 5000 + 10
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 < len;i++)   //把字符串都改成大写字母并把其他符号去掉
{
if(isalpha(buf[i]))
{
p[m] = i;
s[m++] = toupper(buf[i]);
}
}
for(i = 0;i < m;i++)   //遍历第i个字母  这个更快
{
for(j = 0;i - j >=0&&i + j < m;j++)    //用于奇数字符个数
{
if(s[i - j] != s[i + j])break;
if(j * 2 > max){max = j * 2 + 1;x = p[i - j];y = p[i + j];}
}
for(i = 0;i - j >= 0&&i + j + 1< m;j++)  //用于偶数
{
if(s[i - j] != s[i + j +1])break;
if(j * 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐