KMP 自動機

g1ove發表於2024-10-08

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];
		}
	}
}

相關文章