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;}
- NYOJ - 最长回文子串
- nyoj-132-最长回文子串
- nyoj 132-最长回文子串
- nyoj 132 最长回文子串
- NSWOJ 1228 && NYOJ 132 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- jquery优化--选择符
- 各种排序算法C++模版类实现
- [C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
- 最大堆的构造
- NYOJ - 最长回文子串
- oracle反向索引
- 学习路上的点点滴滴
- OpenStack建立实例完整过程源码详细分析(5)
- python 打印json格式的数据中文显示问题
- Cocos2dxActivity cannot be resolved to a type解决方案
- oracle自动分区
- 程序报错 undefined reference to `shm_open'
- Could not find *.apk!解决办法