您的位置:首页 > 其它

hihoCoder 1014 Trie树(字典树)

2016-09-09 19:34 459 查看
题目来源:

http://hihocoder.com/problemset/problem/1014

里面有字典树的建立过程,可以参考。

#include<cstdio>
struct trie //利用结构体来封装字典树的节点。
{
trie* next[27];
int num;
trie()
//构造函数。
{
for(int i=0; i<26; i++)
next[i]=NULL;
num=0;
}
} root;
void insert(char* s) //将字符串s所表示的单词插入到字典树中。
{
trie *p=&root;
for(int i=0; s[i]!='\0'; i++)
{
if(p->next[s[i]-'a']==NULL)
p->next[s[i]-'a']=new trie;
p=p->next[s[i]-'a'];
p->num++;
}
}
int find(char *s) //返回值是以s为前缀的单词的数量。
{
trie *p=&root;
for(int i=0; s[i]!='\0'; i++)
if(p->next[s[i]-'a']==NULL)
return 0;
else
p=p->next[s[i]-'a'];
return p->num;
}
int main()
{
char str[100010];
int n;
scanf("%d",&n);
getchar();
while(n--)
{
gets(str);
insert(str);
}
int m;
scanf("%d",&m);
while(m--)
{
scanf("%s",str);
printf("%d\n",find(str));
}
}

样例输入:

5

babaab

babbbaaaa

abba

aaaaabaa

babaababb

5

babb

baabaaa

bab

bb

bbabbaab

样例输出:

1

0

3

0

0

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: