编程珠玑(二)寻找一个字符串中最长重复字串
来源:互联网 发布:农村审美 知乎 编辑:程序博客网 时间:2024/05/22 02:07
例如字符串"banana"中最长重复字串为ana,这里用到了一个很简单的数据结构字符串数组,其实为一个字符串指针数组,一个char *类型的数组,用字符地址代表每个字符,可以节省空间。算法很简单,求出每个后缀数组,然后对后缀数组进行排序,最后求出相邻的两个数组之间的最大公共字串。
#include <iostream>using namespace std;void common_str(char *s, char **com);void bubble(char **a, int s, int e);int common_len(const char *s1, const char *s2); //求s1和s2从第一个字符开始相同的字符的个数int main(){ char s[] = "banana"; char *com = NULL; common_str(s, &com); printf("common str is %s\n", com); return 0;}void common_str(char *s, char **com){ int len = strlen(s); char **a = new char *[len]; int i = 0; while(s[i]) { a[i] = &s[i]; i++; } bubble(a, 0, len-1); int com_len = 0; char *com_str = NULL; for(int j=0; j<=len-2; j++) { int c_len = common_len(a[j], a[j+1]); if(c_len > com_len) { com_len = c_len; com_str = a[j]; } } *com = new char[com_len + 1]; memcpy(*com, com_str, com_len); (*com)[len] = '\0'; //这里这句话不写也可以,因为原来数组每个元素都为NULL,但是不可写成*com[len] = '\0';[]下标的优先级高于*}void bubble(char **a, int s, int e){ int len = e-s+1; for(int i = len-1; i--; i>0) for(int j = 0; j<=i; j++) if(strcmp(a[j], a[j+1]) > 0) { char *temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }}int common_len(const char *s1, const char *s2){ int len = 0; while(*s1 == *s2 && s1!=NULL && s2!=NULL) { len++; s1++; s2++; } return len;}
- 编程珠玑(二)寻找一个字符串中最长重复字串
- 编程珠玑: 15章 字符串 15.2寻找字符串中的最长重复子串 -------解题总结
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 转载:查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 - 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
- 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
- 寻找一个字符串中最长的重复子串
- 寻找一个字符串中最长的重复子串
- 字符串中重复出现的最长字串
- 寻找一个字符串中最长的重复子串,如 abcdabc 最长重复串 是abc
- 在一个字符串中寻找到最长重复子串(1)
- 在字符串中寻找连续最长的数字串
- 返回一个字符串中重复出现的最长字串的长度及其开始字符
- 字符串中的最长重复字串
- 求一个字符串的最长重复字串问题
- 用后缀数组 求一个字符串的最长重复字串
- 安装 LAMP 环境使用到的命令
- 通过代码设置Android联系人的头像
- ubuntu12.04设置root登录
- java 中unsigned类型的转换
- sharepoint 2007 添加新用户权限时,默认不选中 Send welcome e-mail to the new users
- 编程珠玑(二)寻找一个字符串中最长重复字串
- centos5.8 yum源
- MongoDB数据文件备份与恢复
- js异步队列函数
- Android实习笔记----调用拨号器,邮件短信和Google 地图
- C数据结构算法_搜索
- 脱离Hadoop的环境下使用Lzo
- oracle(1)验证机制以及用户创建、修改
- 虚拟机学习系列 - 附 - OQL(对象查询语言)