题目大意: 求出以某字符串为前缀的单词的数量
解决:trie树
#include <iostream> #include <cstring> using namespace std; struct node { int cnt; int next[26]; }; node trie[3000000]; int top=0; void init() {//初始化字典树,0号为根节点,只需将next值置为0就行了 memset(trie[0].next,0,sizeof(trie[0].next)); top=1; } void insert(char *str) { int i=0,id;//i为根节点 while(*str) { id=*str-'a'; if(trie[i].next[id]==0) {//若为空,开辟新空间,并初始化新空间 trie[i].next[id]=top; trie[top].cnt=1; memset(trie[top].next,0,sizeof(trie[top].next)); top++; i=trie[i].next[id]; } else {//若不空,指向下一个地址,并对下一个地址的元素操作 i=trie[i].next[id]; trie[i].cnt++; } str++; } } int search(char *str) { int i=0,id; while(*str) { id=*str-'a'; if(trie[i].next[id]==0)return 0; i=trie[i].next[id]; str++; } return trie[i].cnt; } int main() { char str[15]; init(); while(gets(str),strcmp(str,"")!=0)insert(str); while(~scanf("%s",str))printf("%d\n", search(str)); // system("pause"); return 0; }