L2-008. 最长对称子串
2016-05-15 20:56
225 查看
L2-008. 最长对称子串
时间限制100 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:Is PAT&TAP symmetric?输出样例:11今天我去参加了天梯赛,感觉还行,我讲一下一个题就是最长对称子串:首先,要明白题意,,,,对称对称,就是沿一条线对称,而这条线有两种情况,一种:是像例题一样的把一个字符看成是一条线;另一种是把字符与字符间的空隙看成是一条线,,,,,,明白吗?(PAT&TAP这就是把&看成是一条线)(asddsa这就是把dd中间的空隙看成是一条线);;;;;通过以上的例子我们就发现了这个题的这种思想有两种方法::::而怎样去A呢?第一种应该把当成一条线的字符看成中间再往两边查:这就初始化为1了,,第二种就把空隙看成线往两边查,这就初始化为0了,,,看代码详细一点查看源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char a[10005]; //字符串的储存 int b[10005]; //第一种方法 int c[10005]; //第二种方法 int main() { int n,m,i,j; gets(a); int len = strlen(a); for(i = 0;i < 10005; i++) { b[i] = 1; //初始化为1;; } for(i = 0;i < 10005; i++) { c[i] = 0; //初始化为0;; } for(i = 1;i < len; i++) { for(j = 1;j <= i; j++) //从字符的两边开始查那就把j的开始为1;; { if(a[i+j] == a[i-j]) //如果相同 b[i] = b[i]+2; //那这个地方所配对的b加2;; else break; //如果不相同直接跳出 } } for(i = 1;i < len; i++) { for(j = 0;j <= i; j++) //从空隙的两边开始查那就把j的开始为0;; { if(a[i+j+1] == a[i-j]) //这就是关键要正好为空隙的两边 c[i] = c[i]+2; //相同加2 else break; } } int max = 0; for(i = 0;i < len;i++) //找出最大的,, { if(max < b[i]) max = b[i]; if(max < c[i]) max = c[i]; } printf("%d\n",max); return 0; } 代码菜鸟,如有错误,请多包涵!! |
相关文章推荐
- BZOJ3685: 普通van Emde Boas树
- PPT怎么插入图案填充效果
- 标题吸顶的 4000 viewpager实现方案
- 机器学习竞赛技巧
- hadoop 新API与旧API对比
- UVa 1606 两亲性分子 扫描法
- 测试如何在博客中加入代码
- 天乙社区后台管理之常规选项cookie和通行证设置
- C/C++与Matlab混合编程
- Unity:Navmesh
- Problem H: Eat Candy
- android ListView的简单使用与优化
- maven的安装及配置
- 进度对话框
- [PWA] 2. Service worker life cycle
- 为什么要使用Servlet?
- hzauoj The Same Color (模拟)
- Redis分布式解决方案-Coids
- Flea travel(别样A+B)
- eclipse启动tomcat中出现java.lang.OutOfMemoryError: PermGen space 解决办法