#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 100
void 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));
}
最长重复子串,后缀树
最新推荐文章于 2023-04-18 23:49:08 发布