KMP 自动机
定义状态 \(\texttt{nxt}_{i,j}\) 表示在 \(i\) 接一个字符 \(j\) 的最终匹配位置。
转移是显然的。
\(\texttt{nxt}_{i,j}=\texttt{nxt}_{fail_i,j}\)
注意 KMP 的字符集无关的,而 KMP 自动机依赖字符集大小。
struct Auto{char s[N];int n,nxt[N][26];void init(){n=strlen(s+1);int fail=0;for(int i=1;i<=n;i++){int c=s[i]-'a';fail=nxt[fail][c];nxt[i-1][c]=i;for(int j=0;j<26;j++)nxt[i][j]=nxt[fail][j];}}
}