利用后缀数组找字符串中相同且长度最长的字符串
2014-08-22 20:24
323 查看
int con_sub(char *str,char *ret) { int max_len=0;//记录最大长度 int temp_len=1; int len=strlen(str); char** next=(char**)malloc(sizeof(char *)*len); for (int i=0;i<len;i++)//后缀数组 { next[i]=str+i; } for (int k=1;k<(len+1)/2;k++)//相等大小不会大于一半,相等大小的控制 { for (int i=0;i<len-1;i++)//从头开始比较,控制第i个子串与后面的比较 { temp_len=1; for (int j=0;i+k+j<=len-1;j++)//用于比较不相邻的字串是否相等,控制后面被比较的子串 { if (strncmp(next[i],next[i+k+j],k)==0)//跨度为k进行比较前k个字符,找到一个相等的,立即进入下一个k值比较,如果不等next[i+k+j]往下移动一位,由j控制 { temp_len=k; break; } } if (temp_len>max_len) { max_len=temp_len; strncpy(ret,str+i,max_len);//把最大的重复字符串保存起来 break; } } } return max_len; }
相关文章推荐
- 程序员面试宝典:输入一行字符串,找出其中出现的相同且长度最长的字符串----后缀数组求解
- 利用后缀数组求字符串的最长重复子串的算法 利用二维数组求两个字符串的最长公共字串(动态规划)
- [SID-EXAM]利用后缀数组求两个字符串的最长公共子串,较dp效率要高
- 利用后缀数组求字符串中的最长公共字串——编程珠玑15章
- 【后缀数组】 POJ 2774 Long Long Message 两个字符串的最长公共子串长度
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- 求一个字符串中出现的相同且长度最长的字符串,及其首字符的位置
- (1452)找出字符串中出现的相同的且长度最长的字符串,输出它及其首字母的位置
- poj 3882 后缀数组 求一个串至少出现k次的最长重复子串的长度
- 利用Collections工具类获取字符串数组中最长的元素
- 字符串中相同且长度最长的字符串
- 输入一行字符串,找出其中出现的相同且长度最长的字符串
- 后缀树和后缀数组 [3 两个字符串的最长公共子串]
- 字符串 后缀数组(可重叠的k 次最长重复子串)poj 3261
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- poj 1743 字符串 后缀数组 不可重叠最长重复子串
- 利用数组求字符串长度
- 编程珠玑:用后缀数组寻找最长重复字符串
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- 寻找相同且长度最长的字符串