HIHO第二周-Trie树
2015-04-03 14:23
357 查看
题目:
点击打开链接
Trie树一般用于找有相同前缀的单词集合,可以用字符串补全等。这里有26个英文字母,所以建立的Trie树是26叉树。root节点不存储字符和计数。
在建树的同时,对经过的节点进行计数。
参考其他人的代码手打了一遍,加了一些注释。
解答
点击打开链接
Trie树一般用于找有相同前缀的单词集合,可以用字符串补全等。这里有26个英文字母,所以建立的Trie树是26叉树。root节点不存储字符和计数。
在建树的同时,对经过的节点进行计数。
参考其他人的代码手打了一遍,加了一些注释。
解答
#include<iostream> #include<string> using namespace std; typedef struct trie{ int count; char c; struct trie* next[26]; }Trie; int main(){ //头结点不存储c和count Trie* root=new Trie; for(unsigned i(0);i<26;i++){ root->next[i]=NULL; } int n,m; string s; cin>>n; while(n--){ Trie* p=root; cin>>s; for(unsigned i(0);i<s.size();i++) { //哪一分支 unsigned j=s[i]-'a'; //不为空 if(p->next[j]) ++p->next[j]->count; else //新建结点 { Trie* q=new Trie; q->count=1; q->c=s[i]; for(unsigned k(0);k<26;k++){ q->next[k]=NULL; } p->next[j]=q; } p=p->next[j]; } } cin>>m; while(m--){ cin>>s; //标记是否存在于字典 bool flag=false; Trie* p=root; for(unsigned i(0);i<s.size();i++){ unsigned j=s[i]-'a'; //为空,则不存在 if(!p->next[j]){ flag=true; break; } p=p->next[j]; } if(flag) cout<<'0'<<endl; else cout<<p->count<<endl; } }
相关文章推荐
- hiho 第二周 trie树
- 编程之美hiho一下第二周Trie树
- hiho一下第二周Trie树 题解
- (hiho一下第二周)#1014 Trie树 【模版】
- hiho第二周——Trie树
- hiho一下第二周 Trie树
- hiho一下第二周:Trie树
- hiho一下第二周 Hihocoder #1014 : Trie树
- 【hiho一下第二周 】Trie树
- hiho一下 第二周&第四周:从Trie树到Trie图
- 【hiho一下】第二周 Trie树
- hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)
- hiho一下第二周 Trie树
- hiho一下第二周#1014 : Trie树
- hiho一下 第二周 trie树
- hiho 1014 trie树
- hiho 1014 : Trie树
- hiho一下第二周——字典树
- HiHo 1014 Trie树
- hiho一下 第二周