hdu 1251(字典树)
Posted AC菜鸟机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 1251(字典树)相关的知识,希望对你有一定的参考价值。
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 29183 Accepted Submission(s): 11454
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
banana
band
bee
absolute
acm
ba
b
band
abc
Sample Output
2
3
1
0
字典树水题。。主要就是判断java判断空行结束
String str = sc.nextLine();
if(str.length()==0) break;
if(str.length()==0) break;
第二个把 sc.hasNext写成了 true ,无限循环错了n多次 。。。
import java.util.Scanner; class Trie { private Node root; public Trie() { root = new Node(); } public void insert(String str){ Node t = root; for(int i=0;i<str.length();i++){ if(t.nodes[str.charAt(i)-‘a‘]==null){ Node node = new Node(); t.nodes[str.charAt(i)-‘a‘] = node; } t = t.nodes[str.charAt(i)-‘a‘]; t.num++; } } public int find(String str){ Node t = root; for(int i=0;i<str.length();i++){ if(t.nodes[str.charAt(i)-‘a‘]==null) return 0; t = t.nodes[str.charAt(i)-‘a‘]; } return t.num; } class Node{ int num; Node []nodes; public Node() { num= 0; nodes = new Node[26]; } } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Trie tree = new Trie(); while(true){ String str = sc.nextLine(); if(str.length()==0) break; tree.insert(str); } while(sc.hasNext()){ String str1 = sc.nextLine(); System.out.println(tree.find(str1)); } } }
以上是关于hdu 1251(字典树)的主要内容,如果未能解决你的问题,请参考以下文章