最长重复子串——后缀数组
来源:互联网 发布: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;}