AC自动机是一种多模匹配算法。
AC自动机是先将KMP算法和Trie树结合,用多个模式串构建一棵字典树,然后在字典树上构建 失配指针,失配指针相当于KMP算法中的nxt函数(匹配失败时的回退位置),最后将主串在Trie树上进行模式匹配。AC自动机算法分为3步:①构建一棵字典树②构建AC自动机(对每个节点添加失配指针)③进行模式匹配
构建字典树
int tot=1;
void insert(string s)
{
int len=s.length(),p=1;
for(int i=0;i<len;i++)
{
int ch=s[i]-'a';
if(!trie[p][ch]) trie[p][ch]=++tot;
p=trie[p][ch];
}
cnt[p]++;
}
构建失配指针
(1)树根入队
(2)若队列不为空,则取队头元素t并出队,访问该元素的每一个子节点trie[t][i]
①若不为0,则(平行四边形)</