最长重复子串——后缀数组

来源:互联网 发布:h3c mac acl 编辑:程序博客网 时间:2024/06/08 19:22
#include <iostream>#include <stdlib.h>using namespace std;#define N 100char s[N];char suf[N][N];int max_same = 0;int comp(const void *s1, const void* s2){    return strcmp((char*)s1, (char*)s2);}int get_same(char* s1, char* s2){    int count = 0;    while(*s1 && *s2 && *s1++==*s2++)        count++;    return count;}void f(){    int len = strlen(s);    int i;    char *p = s;    for(i=0; i<len; i++)    {        strcpy(suf[i], p+i);    }    qsort(suf, len, N, comp);        int temp;    int temp_id;    for(i=1; i<len; i++)    {        temp = get_same(suf[i], suf[i-1]);        if(temp>max_same)        {            max_same = temp;            temp_id = i;        }    }        suf[temp_id][max_same] = '\0';    cout<<max_same<<": "<<suf[temp_id]<<endl;}int main(void){    strcpy(s, "abcdefgbcdeg");    f();    return 0;}