HDU 1251 统计难题

来源:互联网 发布:什么越狱软件好 编辑:程序博客网 时间:2024/04/28 23:40
package hdu;import java.util.Scanner;/** * @description Hdu1251 统计难题。 1. 建立字典树. *   2. * @author Alex * */public class Hdu1251_20120731_0 {public static void main(String[] args) {Scanner in = new Scanner(System.in);Tries1 root = new Tries1();String str;while(!"".equals(str = in.nextLine())){insert(root,str);}while(in.hasNextLine()){str = in.nextLine();System.out.println(query(root,str));}}/** * 查询以 str 为前缀的字符串个数. * @param root * @param str * @return */private static int query(Tries1 root, String str){int i = 0, len = str.length();Tries1  p = root;for(i = 0; i < len; ++i){if(p.getNext(str.charAt(i)-'a')!= null){p = p.getNext(str.charAt(i)-'a');}else{return 0;}}return p.getCount();}/** * 根据字符串 str 构造字典树. 结点 count 值记录以此字符串为的前缀的数目. * @param root * @param str */private static void insert(Tries1 root,String str){Tries1 p = root;int i, len = str.length();for(i = 0; i < len; ++i){if(p.getNext(str.charAt(i)-'a')!=null){p = p.getNext(str.charAt(i)- 'a');p.setCount();}else{p.setNext(str.charAt(i)- 'a');p = p.getNext(str.charAt(i)- 'a');}}}}class Tries1{private int count;  private Tries1[] next;public Tries1(){count = 1;next = new Tries1[26];}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public void setCount(){++count;}public Tries1 getNext(int index){return this.next[index];}public void setNext(int index){this.next[index] = new Tries1();}}

原创粉丝点击