hihocoder Trie树

思路:

Trie树(字典树)。

数据量大的时候可以预先开一个全局数组存放树节点,需要的时候就分配,比每次new申请空间省时间。

实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string.h>
 4 #define MAX 26
 5
 6 using namespace std;
 7
 8 struct trieNode
 9 {
10     trieNode * next[MAX];
11     int cnt;
12 };
13
14 trieNode * createTrie()
15 {
16     trieNode * root = new trieNode();
17     root -> cnt = 1;
18     for(int i = 0; i < MAX; i++)
19     {
20         root -> next[i] = NULL;
21     }
22     return root;
23 }
24
25 void insert(trieNode * root,char * str)
26 {
27     trieNode * tmp = root;
28     int len = strlen(str);
29     for(int i = 0; i < len; i++)
30     {
31         int index = str[i] - ‘a‘;
32         if(tmp -> next[index] != NULL)
33         {
34             tmp -> next[index] -> cnt ++;
35         }
36         else
37         {
38             tmp -> next[index] = createTrie();
39         }
40         tmp = tmp -> next[index];
41     }
42 }
43
44 int search(trieNode * root,char * str)
45 {
46     int len = strlen(str);
47     trieNode * tmp = root;
48     for(int i = 0; i < len; i++)
49     {
50         int index = str[i] - ‘a‘;
51         if(tmp -> next[index] != NULL)
52         {
53             tmp = tmp -> next[index];
54         }
55         else
56         {
57             return 0;
58         }
59     }
60     return tmp -> cnt;
61 }
62 int main()
63 {
64     trieNode * root = createTrie();
65     char tmp[11];
66     int n, m;
67     scanf("%d", &n);
68     for(int i = 0; i < n; i++)
69     {
70         scanf("%s", tmp);
71         insert(root, tmp);
72     }
73     scanf("%d", &m);
74     for(int i = 0; i < m; i++)
75     {
76         scanf("%s", tmp);
77         printf("%d\n", search(root, tmp));
78     }
79     return 0;
80 }
时间: 2025-01-01 21:20:45

hihocoder Trie树的相关文章

HihoCoder Trie树 java实现

太晚知道知道这个平台了,还是接到MS的笔试通知后才得知,平台真不错. 言归正传,问题描述: 1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:"小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?" 身

【Hihocoder】1014 : Trie树

问题:http://hihocoder.com/problemset/problem/1014 给定一个字符串字典dict,输入字符串str, 要求从dict中找出所有以str为前缀的字符串个数. 构建Trie树: 1) 一个节点有多个子节点.用vector<Node*> nexts 存储. 2) 两个字符串的相同前缀部分共用同一条路径. 3) 每个节点包含计数变量 cnt, 表示有多少个字符串共用该节点 复杂度分析: 假定dict中的字符串个数 n, 字符串的长度 l 1)建树:O(n^2*

hihoCoder 1014 Trie树(字典树入门)

题目链接:http://hihocoder.com/problemset/problem/1014(此题附入门讲解) 题面: #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:"小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符

hihoCoder #1014 : Trie树 [ Trie ]

传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你

hihoCoder 1014 Trie树

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字

hihoCoder 1014 : Trie树(字典树)

传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符串是不是这个单词的前缀不就是了?” 小Hi笑道:“你啊,还是太年轻了!~

hihoCoder 1014 Trie树 (Trie)

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho是一对好朋友.出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天.他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:"小Ho.你能不能对于每个我给出的字符串,都在这个词典里面找到以这个字符串开头的全部单词呢?" 身经百战的小Ho答道:"怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的全

Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字

hihoCoder 1014 Trie树(基础字典树)

题意  中文 最基础的字典树应用噢噢噢噢 #include<cstdio> #include<cstring> using namespace std; struct trie { trie *chi[26]; int num; trie() { num = 0; for(int i = 0; i < 26; ++i) chi[i] = NULL; } }*root; void insertTrie(char s[]) { trie *p = root; p->num+