cpp 代码
- #include <iostream></iostream>
- #include <string></string>
- #define MAXN 100000
- using namespace std;
- int main()
- {
- char str[MAXN];
- int next[MAXN];
- int maxpos = 0;
- int maxlen = 0;
- cin >> str;
- int len = strlen(str);
- for (char *s = str; s[0] != '\0' && len > maxlen; s++, len--) {
- next[0] = -1;
- for (int i = 1, j = 0; i < len; i++, j++) {
- while (j >= 0 && s[i] != s[j]) j = next[j];
- next[i] = j;
- if (j > maxlen) {
- maxpos = i + s - str - j;
- maxlen = j;
- }
- }
- }
- cout << "result : " << maxpos << ' ' << maxlen + 1 << endl;
- }
时间复杂度为O(n^2),但是实现非常简单,如果不考虑编程痛苦用后缀树的话,可以用