AC自动机,C++实现
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
struct Ac_Node {
Ac_Node() {
memset(child, NULL, sizeof child);
}
Ac_Node *child[26]; //26个子节点
Ac_Node *fail; //匹配失败时
vector<int> exist; //存储当前节点所表示单词的长度
};
class Trie {
private:
Ac_Node *root; //根节点,不存放任何数据
void insert(const string &);//构建字典树用,向字典树插入一个新单词
public:
Trie() {
root = new Ac_Node;
root->fail = root;
}
explicit Trie(const vector<string> &str){
root = new Ac_Node;
root->fail = root;
insert(str);
}
void insert(const vector<string> &);//插入多个字符串
void find(const string &);//查找函数
};
void Trie::insert(const vector<string> &str) {
int sz = str.size();
for (int i = 0; i < sz; i++) {
insert(str[i]);