什么是AC自动机? 能让你自动AC的代码?(显然不是)
1.AC自动机是一种有限状态自动机(说了等于没说),它常被用于多模式串的字符串匹配。
2.在学完AC自动机,笔者也总结出一句说了等于没说的话: AC自动机是以Trie的结构为基础,结合KMP的思想建立的。 (AC = KMP + Trie) 但不完全是。
前置知识:KMP 和Trie。 (很重要)
先说一下如何建AC自动机
1. 基础的Trie结构:将所有的模式串构成一棵Trie树。
2. KMP的思想:对Trie树上所有的结点构造失配指针。
Trie树构造
和trie树的插入操作一样,将模式串存入。
void insert(char *s){
int u=1,len=strlen(s); //从1开始跳
for(register int i(0) ; i<len ; i=-~i){
int c=s[i]-'a';
if(!ch[u][c]) ch[u][c] = ++tot; //没有这个字母的边的话,新建一条
u = ch[u][c]; //接着往下跳
}
bo[u]++; //将