最长重复子串,后缀树

来源:互联网 发布:tp-link路由器网络设置 编辑:程序博客网 时间:2024/05/22 15:49
#include<iostream>using namespace std;int compare(const void *arg1, const void *arg2){return strcmp(*(char **)arg1,*(char **)arg2);}int CommonLen( char *str1,  char *str2){int i = 0;while (*str1 &&(*str1++ == *str2++)){++i;}return i;}#define  MAXLEN 100void FindLongestReString(char *str,int len){if (NULL == str || len <= 0 ){return ;}char *suffix[MAXLEN];int i=0;for (;i < len;i++){suffix[i]=str+i;}qsort(suffix,len,sizeof(char *),compare);unsigned int maxLen = 0,maxI = 0,iLen;for (i = 0; i < len-1;++i){iLen = CommonLen(suffix[i],suffix[i+1]);if (iLen > maxLen){maxLen = iLen;maxI = i;}}cout << "longest suffix has:" << maxLen << ".that is\n";for (i = 0; i < maxLen ;++i){cout << *(suffix[maxI]+i);}cout <<endl;}int main(){char *str = "googlegoogeaggggoogle";FindLongestReString(str,strlen(str));}

原创粉丝点击