#include <stdio.h>
#include <cstring>struct Node
{
Node *next[26];
int count; //记录前缀的个数
Node(){
count = 0;
memset(next, 0, sizeof(next));
}
};Node *root = new Node;
void Insert(char *s)
{
int len = strlen(s);
Node *p = root, *q;
int id = 0;
for(int i = 0; i < len-1; i++) //因为输入用fgets()函数,会把"\n"读入进去,故len-1;
{
id = s[i] - 'a';
if(p->next[id] == 0)
{
q = new Node;
q->count = 1; //这种情况下要初始化为 1
p->next[id] = q; //给next(id)分配空间的过程,就是插入的过程
}
else
p->next[id]->count++; //如果存在就加一
p = p->next[id];
}
}int search(char *s)
{
Node *p = root;
int len = strlen(s);
int id;
for(int i = 0; i < len; i++)
{
id = s[i] - 'a';
if(p->next[id] == 0) //如果找不到,就返回0;
return 0;
p = p->next[id];
}
return p->count;
}int main()
{
char str[15];
while(fgets(str, 15, stdin) && strcmp(str, "\n") != 0)
{
Insert(str);
}
while(~scanf("%s", str))
{
int ans = search(str);
printf("%d\n", ans);
}
return 0;
}
统计难题 HDU - 1251-(字典树)
最新推荐文章于 2021-11-09 00:20:03 发布