题目描述
题解
kmp求失配,答案应为位数减去末位失配。
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 1000005
char s[N];
int n,T[N];
void calc_T()
{
T[0]=-1;
for (int i=0;i<n;++i)
{
int j=T[i];
while (j!=-1&&s[i]!=s[j])
j=T[j];
T[i+1]=++j;
}
}
int main()
{
scanf("%d\n",&n);
gets(s);
calc_T();
printf("%d\n",n-T[n]);
}