NYOJ - 最长回文子串

来源:互联网 发布:mac ppt 设置动画顺序 编辑:程序博客网 时间:2024/05/16 07:06

最长回文子串

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述
输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首尾不要输出多余的字符串)。输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组)。
输入
输入一个测试数据n(1<=n<=10);
随后有n行,每行有一个字符串。
输出
输出所要求的回文子串。
样例输入
1Confuciuss say:Madam,I'm Adam.
样例输出
Madam,I'm Adam

#include <stdio.h>#include <string.h>#define MAXN 5005int main(int argc, char const *argv[]){char a[MAXN],b[MAXN];int c[MAXN];int ncase;scanf("%d%*c",&ncase);while(ncase--){gets(a);int l,sz = strlen(a),pos = 0,max = 0;for(int i = 0; i < sz; i++){if('A' <= a[i]&&a[i] <= 'Z'||'a' <= a[i]&&a[i] <= 'z'){c[pos] = i;b[pos++] = a[i] >= 'a'?a[i]-32:a[i];}}int begin,end;for(int i = 0; i < pos; i++){for(int j = 0; i-j>=0&&i+j<pos; j++){if(b[i-j] != b[i+j])break;if(2*j+1 > max){max = 2*j+1;begin = c[i-j];end = c[i+j];}}for(int j = 0; i-j>=0&&i+j+1<pos; j++){if(b[i-j] != b[i+j+1])break;if(2*j+2 > max){max = 2*j+2;begin = c[i-j];end = c[i+j+1];}}}for(int i = begin; i <= end; i++){printf("%c", a[i]);}printf("\n");}return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 硬盘显示不出来怎么办 硬盘插上不显示怎么办 mac不能读取移动硬盘怎么办 mac系统坏了怎么办 ip地址网站打不开怎么办? 电脑页面偏了怎么办 wifi被禁止联网怎么办 oppo浏览器屏蔽网站怎么办 被网站禁言怎么办 网站被模仿了怎么办 公积金不允许提取还房贷怎么办 电脑超出频率限制怎么办 海带宝转运丢失怎么办 xp电脑证书过期怎么办 电脑qq重复登录怎么办 海带宝少东西怎么办 苹果手机照片打不开怎么办 旧电脑没有密码了怎么办 快手忘记登录账号怎么办 b站永久封禁怎么办 微博自动关注怎么办 微博会自动点赞怎么办 游戏名字被占用怎么办 闲鱼头像违规怎么办 请求状态码错误怎么办 微博错误20521怎么办 忘记申请的邮箱怎么办 填写简历忘记邮箱怎么办 雅虎邮箱忘记用户名怎么办 oppo手机忘记密码怎么办 设备昵称忘了怎么办 快手昵称被注册怎么办 app占用越来越大怎么办 淘宝昵称被占用怎么办 电脑开机时间不准怎么办 电脑的时间不对怎么办 做完运动饿了怎么办 qq被冻结七天怎么办 12306电话号码忘了怎么办 新教练没会员怎么办 微博转发频繁怎么办