#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct dirtree
{
struct dirtree *child[26];
int n;
};
struct dirtree *root;
void BuildTree(char *word)
{
int len=strlen(word);
struct dirtree *tem,*Root;
Root=root;
for(int i=0; i<len; i++)
{
if(Root->child[word[i]-'a']==0)
{
tem=(struct dirtree *)malloc(sizeof(struct dirtree));
for(int j=0; j<26; j++)
{
tem->child[j]=0;
tem->n=0;
}
Root->child[word[i]-'a']=tem;
}
Root=Root->child[word[i]-'a'];
Root->n++;
}
}
int Find(char *source)
{
struct dirtree *current;
int len=strlen(source);
current=root;
for(int i=0; i<len; i++)
{
if(current->child[source[i]-'a']!=0)
current=current->child[source[i]-'a'];
else
return 0;
}
return current->n;
}
int main()
{
char temp[11];
int i,j;
root=(struct dirtree*)malloc(sizeof(struct dirtree));
for(i=0; i<26; i++)
root->child[i]=0;
while(gets(temp),strcmp(temp,"")!=0)
BuildTree(temp);
while(scanf("%s",temp)!=EOF)
{
i=Find(temp);
printf("%d\n",i);
}
return 0;
}
hdu1251 字典树的动态存储 不错!
最新推荐文章于 2018-07-18 12:02:20 发布