字典树裸题 C++提交
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Tree
{
Tree *nxt[26];
int cnt;
}*td;
char s[12];
void init(Tree *t)
{
for(int i=0;i<26;++i) t->nxt[i]=NULL;
}
void build(Tree *t,int pos,int L)
{
if(pos>=L) return ;
int x=s[pos]-'a';
if(t->nxt[x]==NULL)
{
t->nxt[x]=(Tree*)malloc(sizeof(Tree));
init(t->nxt[x]);
t->nxt[x]->cnt=1;
build(t->nxt[x],pos+1,L);
return;
}
t->nxt[x]->cnt++;
build(t->nxt[x],pos+1,L);
}
int query(Tree *t,int pos,int L)
{
if(pos==L) return t->cnt;
int x=s[pos]-'a';
if(t->nxt[x]==NULL) return 0;
return query(t->nxt[x],pos+1,L);
}
void del(Tree *t)
{
for(int i=0;i<26;i++)
{
if(t->nxt[i]!=NULL)
del(t->nxt[i]);
}
free(t);
}
int main()
{
int n,m;
while(~scanf("%d",&n))
{
td=(Tree*)malloc(sizeof(Tree));
init(td);
for(int i=0;i<n;++i)
{
scanf("%s",s);
build(td,0,(int)strlen(s));
}
scanf("%d",&m);
for(int i=0;i<n;++i)
{
scanf("%s",s);
printf("%d\n",query(td,0,(int)strlen(s)));
}
del(td);
}
return 0;
}
本文介绍了一道关于Trie树(字典树)的数据结构题目,并提供了一个使用C++实现的具体示例代码。文章通过构建Trie树来解决字符串匹配问题,包括插入字符串、查询字符串出现次数等操作。
319

被折叠的 条评论
为什么被折叠?



