最长回文子串 南邮NOJ 1100
来源:互联网 发布:fw190d13数据 编辑:程序博客网 时间:2024/06/05 22:51
最长回文子串
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 689 测试通过 : 229
总提交 : 689 测试通过 : 229
题目描述
输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。
输入
输入字符串长度不超过5000,且占据单独的一行。
输出
输出最长的回文串,如果有多个,输出起始位置最靠左的。
样例输入
Confuciuss say: Madam,I?m Adam.
样例输出
Madam, I?m Adam
<span style="font-size:12px;">/*枚举回文串中的"中间"位置,然后不断向外扩展,直到有字符不同。*/#include<stdio.h>#include<string.h>#include<ctype.h>#define MAXN 5000+10char 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<n;i++) { if(isalpha(buf[i])) { p[m]=i; s[m++]=toupper(buf[i]); } } for(int 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];} } } for(i=x;i<=y;i++) { printf("%c",buf[i]); } printf("\n"); return 0;}</span>
0 0
- 最长回文子串 南邮NOJ 1100
- 最长回文子串的长度 南邮NOJ 1968
- 南邮 OJ 1100 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 两种方式求1--100以内所有相邻奇偶数之积的和
- Java基础--多线程
- 大家一起来打炮初回放送
- cocos2d-x vs2012 BabeLua安装
- Java基础--输入输出(上篇)
- 最长回文子串 南邮NOJ 1100
- 第16题
- 完整版的Socket服务器端
- 2010年哈尔滨工业大学计算机研究生机试真题
- DELPHI获得系统当前时间日期和格式化时间
- jvm内存使用情况
- 递归应用之括号匹配检验
- AIDL实现跨进程通信
- 在Visual Studio中使用AnkhSVN和Beyond Compare