#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(const char *a,const char *b) //比较两个字符串的大小
{
for(;*a==*b;++a,++b)
if('\0'==*a)
return false;
return *a>*b?false:true;
}
int pk(const char *a,const char *b) //计算a和b的最长相同前缀
{
int k=0;
while(*a&&*a++==*b++)
++k;
return k;
}
int foo(char *s)
{
const int size=strlen(s);
char *a[size];
for(int i=0;i<size;++i)
a[i]=&s[i];
sort(a,a+size,cmp); //倍增算法会更好,这里是常规排序
int maxp=0;
for(int i=0;i<size-1;++i) //逐一比较相邻后缀字符串
maxp=max(maxp,pk(a[i],a[i+1]));
return maxp;
}
最长重复子串(后缀数组思想)
最新推荐文章于 2021-02-28 18:34:20 发布