最长回文数组问题
来源:互联网 发布:淘宝抢购前1000名半价 编辑:程序博客网 时间:2024/04/30 09:27
Description
输入一个字符串,求出其中最长的回文子串。字串的含义是:在原串中连续出现的字符串片段。回文的含义:正着看和倒着看相同。如 abba 和 yyxyy.在判断时,应该忽略多有的标点符号和空格,切忽略大小写。但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。输出字串长度不超过5000,且占据单独的一行。应该输出最长的回文串,如果有多个,输出起始位置最靠左的。
Input
输入字符串
Output
最长回文串
Sample Input
Confuciuss say : Madam,I'm Adam
Sample Output
Madam,I'm Adam
HINT
提示:不能用scanf("%s");读入
自己写的,好像有点复杂。。。。。用的是新学的方法,哈哈好开心。
#include <stdio.h>#include <stdlib.h>#include <strings.h>int main() { char b[10200],a[100000],d1[10000],d2[10000]; int c[10200],bi_an[10200]; int n,i,length_b,z,p,max,max_i,count; gets(a); memset(c,0,sizeof(c)); for(n=0,i=0; a[n]!='\0'; n++) { if((a[n]>=65&&a[n]<=90)||(a[n]>=97&&a[n]<=122)) { if(a[n]>=65&&a[n]<=90) { b[i]=a[n]+32; } else b[i]=a[n]; bi_an[i]=n; i++; if(a[n+1]!='\0') b[i]='#'; i++; } } length_b=strlen(b); for(i=0; b[i]!='\0'; i++) { for(z=i+1,p=i-1; z<=length_b-1&&p>=0; z++,p--) { if(b[z]==b[p]) { if(b[z]=='#')continue; c[i]++; } else { break; } } } max=0; max_i=0; for(i=length_b; i>=0; i--) { if(max<c[i]) { max=c[i]; max_i=i; } } for(n=0,count=0,i=bi_an[max_i]+1; count<max; i++,n++) { d1[n]=a[i]; if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))count++; } d1[n]='\0'; for(n=0,count=0,i=bi_an[max_i]-1; count<max; i--,n++) { d2[n]=a[i]; if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))count++; } d2[n]='\0'; n--; while(n>=0) { printf("%c",d2[n]); n--; } printf("%c",a[bi_an[max_i]]); puts(d1); return 0;}
0 0
- 最长回文数组问题
- java 实现后缀数组及最长回文子串问题
- 最长回文字符串问题
- 最长回文子串问题
- 最长回文子串问题
- 最长回文子串问题
- C 最长回文字串问题
- 最长回文子串问题
- 最长回文子字符串问题
- 最长回文子序列问题
- 最长回文子串问题
- 最长回文子串问题
- 最长回文(后缀数组||Manacher算法)
- 后缀数组(最长回文字串)ural1297
- 【数组和字符串】3.3最长回文串
- ural -1297. Palindrome----后缀数组解决最长回文串的问题
- 最长对称字符串问题/最长回文子串问题
- 求最长回文子串问题
- 关于东野圭吾
- 武大oj 1566 Spanning Tree(最小生成树)
- Android 编程技巧-设置 ADB 连接超时时间
- Shadowsocks服务器端和客户端配置
- 统计权重
- 最长回文数组问题
- R.java文件介绍
- C编译器剖析_5.2.6 中间代码生成及优化_一元表达式及其他表达式的翻译
- asp.net C# DataList绑定数据库
- 如何获取Android唯一标识(唯一序列号)
- 正则表达式学习参考
- calabash-android 命令行使用
- c++ primer 学习笔记12--拷贝赋值,销毁
- 存储过程