AC自动机代码模板

来源:互联网 发布:北津学院教务网络 编辑:程序博客网 时间:2024/05/17 05:19

自己的AC自动机代码模板(很牛比的算法):

class Node{Node[] childs;Node fail;int sum;public Node() {sum=0;childs=new Node[26];}}public class Main {public Node insert(Node root,String s){Node temp=root;root.sum++;for(int i=0;i<s.length();i++){int index=s.charAt(i)-'a';if(temp.childs[index]==null){temp.childs[index]=new Node();}temp=temp.childs[index];temp.fail=root;}temp.sum++;return root;}public void getFail(Node root){Queue<Node> queue=new LinkedList<Node>();queue.add(root);while(!queue.isEmpty()){Node node=queue.poll();for(int i=0;i<26;i++){if(node.childs[i]!=null){Node temp=node.fail;while(temp!=null){if(temp.childs[i]!=null){node.childs[i].fail=temp.childs[i];break;}temp=temp.fail;}if(temp==null) node.childs[i].fail=root;queue.add(node.childs[i]);}}}}public int query(String s,Node root){Node temp=root;int res=0;for(int i=0;i<s.length();i++){int index=s.charAt(i)-'a';while(temp!=null&&temp.childs[index]==null) temp=temp.fail;if(temp==null) temp=root;else temp=temp.childs[index];Node p=temp;while(p!=root&&p.sum!=0){res+=p.sum;p.sum=0;p=p.fail;}}return res;}}


原创粉丝点击