#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <assert.h>
using namespace std;
#define MAX 26 //26个小写字母
struct Dictree
{
int count;//计数
struct Dictree *trie[MAX];
} * a;
int init()
{
a = new Dictree;//创建空间
for(int i = 0; i < MAX; i++)
{
a->trie[i] = NULL;
}
return 0;
}
int searchTrie(char *str) ///查找
{
int len, res;
Dictree *head = a;
//assert(head);
len = strlen(str);
for(int i = 0; i < len; i++)
{
res = (int)(str[i] - 'a');
if(head->trie[res]==NULL) return 0;///找不到的情况
head = head->trie[res];
}
return head->count;
}
void insertTrie(char *str)//插入建树
{
int len, res;
Dictree *head = a;
len = strlen(str);
for(int i = 0; i < len; i++)
{
res = int(str[i] - 'a');
if(head->trie[res] == NULL)
{
head->trie[res] = new Dictree;
head = head->trie[res];
head->count = 0;
for(int j = 0; j < MAX; j++)
{
head->trie[j] = NULL;
}
}
else
head = head->trie[res];
head->count++;
}
}
int main()
{
char str[12];
init();
while(gets(str) && strlen(str))
{
insertTrie(str);
}
while (gets(str))
{
printf("%d\n",searchTrie(str));
}
return 0;
}
07-24