数据结构-字符串匹配AC自动机模板
来源:互联网 发布:淘宝开店审核期去哪查 编辑:程序博客网 时间:2024/05/22 05:29
struct Trie{ int next[N][26],fail[N],end[N]; int rt,L; int newnode(){ memset(next[L],-1,sizeof(next[L])); end[L++]=0; return L-1; } void init(){//初始化 L=0; rt=newnode(); } void insert(char *s){//插入模式串 int n=strlen(s); int p=rt; for(int i=0;i<n;i++){ if(next[p][s[i]-'a']==-1) next[p][s[i]-'a']=newnode(); p=next[p][s[i]-'a']; } end[p]++; } void build(){//建立模式串的字典树 queue<int>Q; fail[rt]=rt; for(int i=0;i<26;i++){ if(next[rt][i]==-1)next[rt][i]=rt; else fail[next[rt][i]]=rt,Q.push(next[rt][i]); } while(!Q.empty()){ int p=Q.front(); Q.pop(); for(int i=0;i<26;i++){ if(next[p][i]==-1)next[p][i]=next[fail[p]][i]; else{ fail[next[p][i]]=next[fail[p]][i]; Q.push(next[p][i]); } } } } int query(char *s){//查询匹配串的匹配度 int n=strlen(s); int p=rt,ans=0; for(int i=0;i<n;i++){ p=next[p][s[i]-'a']; int t=p; while(t!=rt){ ans+=end[t]; end[t]=0; t=fail[t]; } } return ans; }};
0 0
- 数据结构-字符串匹配AC自动机模板
- 数据结构-字符串匹配AC自动机
- 数据结构--AC自动机--模板
- 字符串匹配-AC自动机
- 数据结构--AC自动机--模板2
- 字符串匹配之AC自动机
- 关键词匹配(Ac自动机模板题)
- AC自动机 多模式串匹配 模板
- AC自动机模板(多模式匹配)
- 字符串模板总结(一):AC自动机
- 【AC自动机】AC自动机模板
- AC自动机模板及对多模式匹配的理解
- AC自动机通配符匹配
- AC自动机通配符匹配
- AC自动机匹配
- 【AC自动机】地图匹配
- 数据结构-字符串匹配kmp模板
- 字符串匹配:KMP & AC 自动机个人学习总结
- 百度C++面试题
- 软件上线标准
- redis
- Verilog HDL语言中always敏感信号对比分析
- spring+sprngMVC+mybatis整合
- 数据结构-字符串匹配AC自动机模板
- 读《Machine Learning in Action》的感想
- 朱刘算法,二分法(比赛网络,UVA 11865)
- Java编舟录四---对象的行为
- MotionEvent对象
- 安装MongoDB记录
- IO 多路复用
- hadoop分片大小
- linux 系统入门