最大子串,最大子回文
来源:互联网 发布:电影院售票系统java 编辑:程序博客网 时间:2024/04/28 04:38
被鄙视了一道题,求一个字符串里面最大的子回文。
我想了想,基本的方案是:
把字符串正看和反看,作为两个字符串,然后求最大子串--->这样就简单一些了。
但是,说实话,如果在笔试的时候你能写出借助二维数组的那个版本到真是不太容易的一件事情。
所以,我觉得这个文章写的不错,简单,实用:
http://blog.csdn.net/shaohui/archive/2006/06/09/784577.aspx
但是原文由一个小bug,修正一下,并增加了一些测试case
- #include <stdio.h>
- #include <string.h>
- #define BUFFER_SIZE 255
- int commstr(char *s1, char *s2){
- char buf[BUFFER_SIZE];
- int start,cnt=-1,len1=strlen(s1),len2=strlen(s2);
- for (start=0; start+len2<=len1; start++){//原文是小于不是小于等于
- for (cnt=0; cnt<len2; cnt++)
- if (s1[start+cnt] != s2[cnt])
- break;
- if (cnt >= len2)//如果在s1中找到一个子串和s1相同
- break;
- }
- if (cnt >= len2)//如果s2是s1的子串
- return len2;
- //把s2中后len2-1个字符构成的串同s1比较,并求子串长度
- len1 = commstr(s1,s2+1);
- //把s2中前len2-1个字符构成的串同s1比较,并求子串长度
- strncpy(buf,s2,len2-1);
- buf[len2-1] = '/0';
- len2 = commstr(s1,buf);
- //返回较大者
- return len1 > len2 ? len1 : len2;
- }
- int main(int arc, char *argv){
- printf("%d/n",commstr("fghxxhij","degfghxxhfij"));
- printf("%d/n",commstr("shaohui","huishao"));
- printf("%d/n",commstr("aaabbaa","aabbaaa"));
- printf("%d/n",commstr("aaaaa","aaaaa"));
- printf("%d/n",commstr("shaoshaohuihui","shaohuishaoshaohuihui"));
- return 0;
- }
- 最大回文子串
- 最大子回文串
- 最大回文子串
- 最大回文子串
- 最大子串,最大子回文
- 最大回文子序列&最大回文子串
- 求最大回文子串
- 最大回文子字符串
- 求出所有回文子串及最大回文子串
- 最长回文子串/最大回文子序列
- 最大公共子序列,最大公共子串,最大回文子串
- 程序员笔试题---【最大回文子串】
- 字符串的最大回文子串判断
- 算法分析---查找最大回文子串
- LeetCode 5 最大回文子串
- 求字符串的最大回文子串
- 求最大回文子串的长度
- 查找最大回文子串算法
- 银行卡密码数字出现的频率
- TIdTCPClient控件中文指南(转)
- 开博了
- iText使用入门:编辑,增加,导入,水印,合并PDF的例子
- //用new创建一个二维数组,有两种方法,是等价的
- 最大子串,最大子回文
- iReport 报表元素大全
- 控制字段对应的目标单字段为减数,扣减字段为减数之和
- dbgrideh实现多列选中
- qt4.3.2 安装 (vs2005+winxp)[转]
- JGantt JSF版本前景广阔
- java 通过jdbc连接sql server数据库的常见问题
- 架设支持openID的网站
- Oracle