字典樹 統計難題HDU 1251
#include <stdlib.h>
#include <string.h>
struct trie
{
trie *next[30];
int num;
};
trie *root;
void build(char *str) //建立字典樹
{
int len=strlen(str);
trie *p=root,*q;
for(int i=0;i<len;i++)
{
int id=str[i]-'a';
if(p->next[id]==NULL)
{
q=new trie;
q->num=0;
for(int j=0;j<30;j++)
q->next[j]=NULL;
p->next[id]=q;
}
p=p->next[id];
p->num++; //字典樹走過的節點次數+1,方便查詢
}
}
int find(char *str) //查詢字典樹
{
int len=strlen(str);
trie *p=root;
for(int i=0;i<len;i++)
{
int id=str[i]-'a';
if(p->next[id]==NULL)
return 0;
p=p->next[id];
}
return p->num; //直接返回經過的次數
}
int main()
{
char str[15];
char a;
int tot;
root=new trie;
for(int i=0;i<30;i++)
root->next[i]=NULL;
root->num=0;
while(gets(str)&&str[0])
{
build(str);
}
while(gets(str))
{
printf("%d\n",find(str));
}
return 0;
}