题目链接:(—_—) zZ
字典树
code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
struct node *next[27];
int count;
}trie;
trie *root = NULL;
char str[12];
int len = 0;
void create_trie()
{
int i = 0, j = 0, id = 0;
trie *p = root, *q = NULL;
for(i = 0; i<len; i++)
{
id = str[i]-'a';
if(p->next[id] == NULL)
{
q = (trie *)malloc(sizeof(trie));
q->count = 1;
for(j = 0; j<26; j++)
q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->count++;
p = p->next[id];
}
}
}
int find_trie()
{
int i = 0, id = 0;
trie *p = root;
for(i = 0; i<len; i++)
{
id = str[i]-'a';
p = p->next[id];
if(p == NULL)
return 0;
}
return p->count;
}
int main()
{
int i = 0;
root = (trie *)malloc(sizeof(trie));
for(i = 0; i<26; i++)
root->next[i] = NULL;
while(gets(str))
{
len = strlen(str);
if(!len)
break;
create_trie();
}
while(gets(str))
{
len = strlen(str);
printf("%d\n", find_trie());
}
return 0;
}