需找字符串中重复的最长子串

注意此处说的是重复的最长子串,只要出现重复就好,没说重复的次数。

下面给出的代码是编程珠玑中给出的一种实现。

他是通过后缀数组的方式实现的。

#include<stdlib.h>#include<stdio.h>#include<string.h>using namespace std;int comlen(char*p, char*q)//找出公共的最长子串{int i = 0;if (p == NULL || q == NULL)return 0;while ( (*p++ == *q++))i++;return i;}int pstrcmp(const void*a, const void*b){return strcmp(*(char**)(a),*(char**)(b));}int main(){char* s = "abcdabce";char* a[8];//指针后缀数组for (int i = 0;; i++){if (s[i] == 0)break;a[i] = &s[i];//指针后缀数组赋值}qsort(a, 8, sizeof(char*), pstrcmp);int maxlen = 0,maxi=0;for (int i = 0; i < 7; i++)//找出相邻的最大子串if (comlen(a[i], a[i + 1])>maxlen){maxlen = comlen(a[i], a[i + 1]);maxi = i;}printf("%.*s\n", maxlen, a[maxi]);}在这里特别说明一下在书中没有给出pstrcmp的实现,当时写的程序时候出现的bug位子就是这里。int pstrcmp(const void*a, const void*b){return strcmp(*(char**)(a),*(char**)(b));//注意此处的char**而不是char*}

,每个人都有自己鲜明的主张和个性,

需找字符串中重复的最长子串

相关文章:

你感兴趣的文章:

标签云: