您的位置:首页 > 其它

最长回文子串

2018-02-03 11:51 183 查看
      输入一个字符串,求出其中最长的回文子串。子串的含义是:在预案串中连续出现的字符串片段。在判断中,应该忽视所有标点符号和空格,且忽略大小写,但输出应保持原样

样例输入:Confuciuss say:Madam,I'm Adam.

样例输出:Madam,I'm Adam

代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 1000
int main()
{
char buf[MAX],s[MAX];
int p[MAX];
int i,m=0,n,max=0,x,y,j;
//1.输入
fgets(buf,sizeof(s),stdin);
n=strlen(buf);

//2.去掉标点
for(i=0;i<n;i++)
{
if(isalpha(buf[i]))
{
p[m]=i;
s[m++]=tolower(buf[i]);
}
}
//3.寻找最长回文子串 奇 偶
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];
}
}
}

//4.输出
for(i=x;i<=y;i++)
{
printf("%c",buf[i]);
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: