博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder1014 Trie树
阅读量:5148 次
发布时间:2019-06-13

本文共 1835 字,大约阅读时间需要 6 分钟。

问题描述:

Trie树在字符串处理中的应用十分重要,最典型的应用就是输入法和搜索引擎中的字符串自动补全功能。其核心思想是用一颗树来存储一个字典,树的每一条边表示单词的一个字符,在每个节点上记录以从根节点到当前节点所经过的路径为前缀的字符串个数。

利用字典树,可以实现O(log(n))的单词插入、单词查询、查询以某个前缀开头的字符串数目等。

题目链接:http://hihocoder.com/problemset/problem/1014

我的代码:

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 #define MAX_CH 26 7 #define MAX_NODE 1000005 8 9 int nodecnt;10 11 struct TrieNode12 {13 int cnt;14 TrieNode *p[MAX_CH];15 void init()16 {17 cnt = 0;18 for(int i=0; i
cnt;26 else return p[idx]->query(s+1);27 }28 else29 {30 return 0;31 }32 }33 }t_node[MAX_NODE];34 35 struct Trie36 {37 TrieNode *rt;38 void init()39 {40 rt = &t_node[0];41 rt->init();42 nodecnt = 1;43 }44 void insert(char *s)45 { 46 TrieNode *now = rt; 47 for(int i=0; s[i]; ++i)48 {49 int idx = s[i]-'a';50 if(now->p[idx]==NULL)51 {52 now->p[idx] = &t_node[nodecnt++];53 now->p[idx]->init();54 }55 ++(now->p[idx]->cnt);56 now = now->p[idx];57 }58 }59 int query(char *s)60 {61 return rt->query(s);62 }63 }trie;64 65 int main()66 {67 int n, m;68 char s[20];69 while(scanf("%d", &n)!=EOF)70 {71 trie.init();72 73 while(n--)74 {75 scanf("%s", s);76 trie.insert(s);77 }78 79 scanf("%d", &m);80 while(m--)81 {82 scanf("%s", s);83 printf("%d\n", trie.query(s));84 }85 } 86 return 0;87 }

 

转载于:https://www.cnblogs.com/pczhou/p/4277297.html

你可能感兴趣的文章
css z-index属性使用过程中遇到的问题
查看>>
项目实战——仿360囧图
查看>>
HDU 2111:Saving HDU(贪心)
查看>>
Ext.tree.Panel实现单选,多选
查看>>
iOS UIPrintInteractionController打印
查看>>
人民币贬值不是大问题
查看>>
腾讯推出微信企业服务平台风铃
查看>>
蓝桥杯:剪格子
查看>>
nodejs的安装
查看>>
PHP单例模式浅析
查看>>
ssm+ajax实现登陆
查看>>
freertos之特点
查看>>
利用python统计代码行
查看>>
poj2965--较为巧妙的算法
查看>>
3573: [Hnoi2014]米特运输 - BZOJ
查看>>
http状态码
查看>>
点赞投票+1简单jq代码
查看>>
BZOJ1064 NOI2008假面舞会(dfs树)
查看>>
BZOJ4811 Ynoi2017由乃的OJ(树链剖分+线段树)
查看>>
二进制
查看>>