后缀数组应用(最长重复子字符串)

来源:互联网 发布:知乎 南京装修工作室 编辑:程序博客网 时间:2024/05/22 07:47

给定一个输入字符串,查找其中最长的重复子字符串。例如“banana”的最长重复子字符串是“ana”。

#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;#define MAXN 5000char *buf[MAXN];int pstrcmp(const void *p, const void *q){    return strcmp(*(char**)p, *(char**)q);}int comLen(const char *a, const char *b){if (NULL == a || NULL == b){return -1;}int result = 0;while ((*a != '\0') && (*b != '\0')) {if (*a == *b){result++;}else{break;}a++;b++;}return result;}int maxComLen(char *a, int n){for (int i = 0; i < n; i++){buf[i] = &a[i];}    qsort(buf, n, sizeof(char*), pstrcmp);int result = 0;int pos = 0;for (int i = 0; i < n-1; i++){int len = comLen(buf[i], buf[i+1]);        if (len > result){result = len;pos = i;}}    for (int i = 0; i < result; i++){    cout << buf[pos][i];}cout << endl;return result;}int main(){char a[] = "Ask not what your country can do for you, but what you can do for your country";    cout << maxComLen(a, strlen(a)) << endl;return 0;}       


0 0
原创粉丝点击