太菜了,这道题提交了30次,
用后缀数组做,开始用KMP做有一个测试点过不去,
然后学习后缀数组,这是学结构以来学到最崩溃的一次,好多细节没写好,然后错错错
先KMP的做法,就一个节点未过
#include<iostream>
#include<string>
using namespace std;
int vv[1048577];
int *nextval = (int *)malloc(sizeof(int)* 1048576);
void getnext(string &s,int N) {
int i = 0, j = -1;
while (i < N)
{
if (j == -1 || s[i] == s[j])
{
/*++i; ++j;
if (s[i] == s[j]) nextval[i] = nextval[j];
else nextval[i] = j;*/
nextval[++i] = ++j;
}
else
j = nextval[j];
}
for (i = 1; i < N - 1; ++i)
if (s[i] == s[nextval[i]]) nextval[i] = nextval[nextval[i]];
}
int main()
{
int N;
cin >> N;
nextval[0] = -1;
getchar();
string all;
getline(cin, all);
string str1;
int<