KMP 自动机

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];
		}
	}
}
posted @ 2024-10-08 16:32  g1ove  阅读(8)  评论(0编辑  收藏  举报