题目
Trie树就是字典树。对于一个给定的词典,任给一个字符串,输出词典中以该字符串为前缀的单词数目。
具体描述请见hihoCoder。
解题思路
在建立Trie树的同时我们就可以着手统计以某个字符串为前缀的节点个数,即每次添加一个新单词的时候,沿途更新所有经过的节点。
#include <stdio.h>
#include <stdlib.h>
#define Length 10+1
struct Trie
{
int num;
Trie * next[26];
Trie()
{
num = 0;
int i;
for (i = 0; i < 26; i++)
next[i] = NULL;
}
}trie;
void insert(char str[])
{
Trie * p = ≜
int i;
for (i = 0; str[i]; i++)
{
int a = str[i] - 'a';
if (p->next[a] == NULL)
p->next[a] = new Trie;
p = p->next[a];
p->num++;
}
}
int query(char str[])
{
Trie * p = ≜
int i;
for (i = 0; str[i]; i++)
{
int a = str[i] - 'a';
if (p->next[a] == NULL)
return 0;
p = p->next[a];
}
return p->num;
}
int main()
{
int m, n;
char str[Length];
for (scanf("%d", &n); n--;)
{
scanf("%s", str);
insert(str);
}
for (scanf("%d", &m); m--;)
{
scanf("%s", str);
printf("%d\n", query(str));
}
return 0;
}