字典树模板题&hdu1251

来源:互联网 发布:杭州大数据面授班 编辑:程序博客网 时间:2024/06/07 07:06

题目地址:统计难题


字典树结构用处处理字符串的问题非常方便。


建一棵树,树的每个结点初始都有26个空指针指向儿子结点,表示26个英文字母,根节点root不表示字母。建立一个insert方法插入单词,具有公共前缀的单词公共部分不需要重复插入,这就节省了空间。用search方法对树进行搜索。使用字典树是种折中的做法,和哈希表比起来节省了大量内存,但是速度也当然变慢了




#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct trie{int count;trie* next[26];trie(){count = 0;for(int i=0;i<26;i++){next[i] = NULL;}}};trie *p,*root = new trie();void insert(char* s){p = root;for(int i=0;s[i]!='\0';i++){int k = s[i] - 'a';if(p->next[k]==NULL)p->next[k] = new trie();p = p->next[k];p->count++;}}int search(char* s){p = root;for(int i=0;s[i]!='\0';i++){int k = s[i] - 'a';if(p->next[k]==NULL)return 0;p = p->next[k];}return p->count;}int main(){char s[11];while(gets(s)){int len = strlen(s);if(len==0)break;insert(s);}while(gets(s)){cout<<search(s)<<endl;}return 0;}



0 0
原创粉丝点击