链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1251
题目
banana band bee absolute acm ba b band abc
2 3 1 0
分析与总结:
字典树的基本功能之一, 求前缀个数。
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int KIND = 26; const int MAXN = 150000; int cntNode; struct node{ bool isword; int prefix; node *next[KIND]; void init(){ isword=0; prefix=0; memset(next, 0, sizeof(next)); } }HEAP[MAXN]; inline node* newNode(){ HEAP[cntNode].init(); return &HEAP[cntNode++]; } void insert(node* root, char *str){ for(char *p=str; *p; ++p){ int ch=*p-'a'; if(root->next[ch]==NULL){ root->next[ch] = newNode(); } root = root->next[ch]; root->prefix++; } root->isword=true; } int count(node *root, char *str){ // 返回前缀数量 int sum=0; for(char *p=str; *p; ++p){ char ch=*p-'a'; if(root->next[ch]==NULL) return 0; root=root->next[ch]; } return root->prefix; } int main(){ char str[12]; node *root = newNode(); while(gets(str)){ if(str[0]==0)break; insert(root, str); } while(gets(str)){ printf("%d\n", count(root, str)); } return 0; }
—— 生命的意义,在于赋予它意义士。
原创 http://blog.csdn.net/shuangde800 , By D_Double (转载请标明)