最长回文子串

来源:互联网 发布:a卡优化的单机游戏 编辑:程序博客网 时间:2024/06/05 16:10

输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。


输入

输入字符串长度不超过5000,且占据单独的一行。

输出

输出最长的回文串,如果有多个,输出起始位置最靠左的。

样例输入

Confuciuss say: Madam,I?m Adam.

样例输出

Madam, I?m Adam

题目来源

刘汝佳《算法竞赛入门经典》





#include <iostream>//枚举回文串的中心(假设回文串的长度都是奇数的哈),然后从这个中心逐渐向两边扩展,直到不能扩展为止。

using namespace std;
#define max 5001
int main ()
{
char s[max];
char new1[max];
int pos[max];
int len,i,j=0,k=0;
int maxs=0;
int st=0,end=0;


cin.get(s,max);
len=strlen(s);
for(i=0;i<len;i++) //预处理
if(isalpha(s[i]))
{pos[k]=i;
if(s[i]>=97)
{new1[k]=s[i]-32;


}
else
new1[k]=s[i];


k++;
}


for(i=0;i<k;i++) //回文字符数位奇数的情况
{
for(j=1;i+j<k&&j<=i;j++)
{
if(new1[i-j]!=new1[i+j])
break;
        if(j*2+1>maxs)
{maxs=j*2+1;
st=pos[i-j];
end=pos[i+j];
}
}
for(j=0;j<=i&&i+j+1<k;j++)        //回文字符数为偶数的情况
{ if(new1[i-j]!=new1[i+j+1])
break;
if(j*2+2>maxs)
{ maxs=j*2+2;
 st=pos[i-j];
 end=pos[i+j+1];
}
}


}




for(i=0;i<end-st+1;i++)
cout<<s[st+i];
cout<<endl;
return 0;


}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办 被期刊网骗了怎么办? 缝针缝到神经上怎么办 单位有个事特别多的领导怎么办 网上申请公司核名核不下来怎么办 老公把小三晒朋友圈老婆该怎么办 小三怀孕不愿意打掉怎么办 小三怀孕了引产怎么办 小三发现小四小三发现小四后怎么办 七十岁老人肺癌还有小三样怎么办 留学出国学历公认证怎么办 学历认证报告弄丢了怎么办 想读大专没考上怎么办 学信网身份证被注册了怎么办 学信网手机号换了密保忘了怎么办 学信网手机号改了密保忘了怎么办 学信网手机号忘了密保也忘了怎么办 学信网账号被注销了怎么办 原味奶酪太难吃怎么办 cma年费太贵了怎么办 会计证3年没年检怎么办 幼师面试没有什么特长怎么办 电子学历注册表过期了怎么办 学信网查不到电子注册登记表怎么办 学历证书电子注册备案表过期怎么办 举报人对处理结果不满意怎么办 亚马逊账号申诉后余额怎么办 怎么办北京市工会会员互助服务卡 国家发改委录用公示后怎么办 慕课的账号忘了怎么办 清华同方无线鼠标没反应怎么办 全日制专硕考上公务员了怎么办