java版AC自动机
2015-07-09 09:04
459 查看
class Trie { int [][]Next=new int[500005][128]; int []fail=new int[500005]; int []end=new int[500005]; int root, L; int newnode() { for(int i=0;i<128;i++) Next[L][i]=-1; end[L++]=0; return L-1; } void init() { L=0; root=newnode(); } void insert(byte buf[], int id) { int now=root; for(int i=0; i<buf.length; i++) { if(Next[now][buf[i]]==-1) Next[now][buf[i]]=newnode(); now=Next[now][buf[i]]; } end[now]=id; } void build() { Queue<Integer> q=new LinkedList<Integer>(); fail[root]=root; for(int i=0; i<128; i++) { if(Next[root][i]==-1) Next[root][i]=root; else { fail[Next[root][i]]=root; q.add(Next[root][i]); } } while(!q.isEmpty()) { int now=q.poll(); for(int i=0; i<128; i++) { if(Next[now][i]==-1) Next[now][i]=Next[fail[now]][i]; else { fail[Next[now][i]]=Next[fail[now]][i]; q.add(Next[now][i]); } } } } int query(byte buf[], int n, String s[]) { int now=root; int ans=0; for(int i=0; i<buf.length; i++) { now=Next[now][buf[i]]; int temp=now; while(temp!=root) { ans+=end[temp]; end[temp]=0; temp=fail[temp]; } } return ans; } }
View Code
相关文章推荐
- WebService《JavaEE6权威指南 基础篇第4版》
- maven3常用命令、java项目搭建、web项目搭建详细图解
- Java JSON处理库Jackson
- Spring 系列: Spring 框架简介
- JAVA三大特性之二---继承
- springMVC学习笔记-异常处理
- Java正则表达式语法
- jdk修改配置不鞥生效解决方案
- Java设计模式之_Strategy(策略)_DesignPattern
- java第一个类的测试小例子
- java--照片和BYTE这些东西阵列
- java序列化
- 《编程导论(Java)·12.1基本位运算》
- Hadoop Java Hdfs API
- Java多线程压测工具类
- [Mac OS X]如何卸载java7及更高版本
- JAVA基础-面向对象之异常与包
- Java字符参与运算和字符串参与运算
- Java编程思想学习笔记——复用类
- 20150708 MyEclipse Hibernate Setup