zoukankan      html  css  js  c++  java
  • hihocoder 1014

    http://hihocoder.com/problemset/problem/1014

    构建一棵字典树,然后进行字符串匹配就可以了

    这个题我本来是想用java做,但是做了后才发现有那么多的错误,java还是有待加强啊

    两份代码都基本是一样的,只不过语法规则的区别

    1014 Trie树 AC G++ 1788ms 114MB
    1014 Trie树 AC Java 9548ms 102MB
     1 import java.util.Scanner;
     2 
     3     class Node {
     4         int[] next = new int[26];;
     5         int cnt = 0;;
     6         void inti() {
     7             for (int i = 0; i < 26; i++)
     8                 next[i] = -1;
     9         }
    10     }
    11 
    12 public class Main {
    13 
    14     private static Node[] node = new Node[1000005];
    15     static int cnt;
    16     public static void main(String[] args) {
    17         int a, b;
    18         Scanner cin = new Scanner(System.in);
    19         while (cin.hasNext()) {
    20             cnt = 1;
    21             a = cin.nextInt();
    22             String str;
    23              node[0] = new Node();
    24              node[0].inti();
    25             for (int i = 0; i < a; i++) {
    26                 str = cin.next();
    27                 insert(str);
    28             }
    29             b = cin.nextInt();
    30             for (int i = 0; i < b; i++) {
    31                 str = cin.next();
    32                 Find(str);
    33             }
    34         }
    35     }
    36 
    37     static void insert(String s) {
    38         int p = 0;
    39         for (int i = 0; i < s.length(); i++) {
    40             int tmp = s.charAt(i) - 'a';
    41             if (node[p].next[tmp] == -1) {
    42                  if(node[cnt]==null){
    43                       node[cnt] = new Node();
    44                       node[cnt].inti();
    45                  }
    46                  node[p].next[tmp] = cnt++;
    47             }
    48             p = node[p].next[tmp];
    49              if(node[p]==null){
    50                  node[p] = new Node();
    51                  node[p].inti();
    52              }     
    53             node[p].cnt++;
    54         }
    55     }
    56 
    57     static void Find(String s) {
    58         int p = 0;
    59         for (int i = 0; i < s.length(); i++) {
    60             int tmp = s.charAt(i) - 'a';
    61             if (node[p].next[tmp] == -1) {
    62                 System.out.println("0");
    63                 return;
    64             }
    65             p = node[p].next[tmp];
    66         }
    67         System.out.println(node[p].cnt);
    68     }
    69 }
     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 
     6 class Node {
     7 public :
     8     int next[26];
     9     int cnt = 0;
    10     void inti() {
    11         for (int i = 0; i < 26; i++)
    12             next[i] = -1;
    13     }
    14 };
    15 Node node[1000005];
    16 int cnt;
    17 void insert(string s) {
    18     int p = 0;
    19     for (int i = 0; i < s.length(); i++) {
    20         int tmp = s[i] - 'a';
    21         if (node[p].next[tmp] == -1) {
    22             node[cnt].inti();
    23             node[p].next[tmp] = cnt++;
    24         }
    25         p = node[p].next[tmp];
    26         node[p].cnt++;
    27     }
    28 }
    29 
    30 void Find(string s) {
    31     int p = 0;
    32     for (int i = 0; i < s.length(); i++) {
    33         int tmp = s[i] - 'a';
    34         if (node[p].next[tmp] == -1) {
    35             cout << "0" << endl;
    36             return;
    37         }
    38         p = node[p].next[tmp];
    39     }
    40     cout << node[p].cnt << endl;
    41 }
    42 int main() {
    43     int a, b;
    44     cnt = 1;
    45     cin >> a;
    46     string str;
    47     node[0].inti();
    48     for (int i = 0; i < a; i++) {
    49         cin >> str;
    50         insert(str);
    51     }
    52     cin >> b;
    53     for (int i = 0; i < b; i++) {
    54         cin >> str;
    55         Find(str);
    56     }
    57 }
  • 相关阅读:
    Redis 设计与实现-内部数据结构
    RuntimeBinderException 异常
    IPv4和IPv6地址库
    -Xms -Xmx -Xmn -Xss -XX:
    倒计时
    列表操作-分片赋值
    20175316毕设准备Day1-2
    20175316毕业设计——基于区块链服务的仓库管理系统
    Python学习笔记:sys.argv入参
    Python学习笔记:bisect模块实现二分搜索
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/6985050.html
Copyright © 2011-2022 走看看