參考資料 :
http://www.wutianqi.com/?p=1359
http://blog.csdn.net/xingyeyongheng/article/category/1516007
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Trie
{
int num;
Trie *next[26];//指針數組
}root;
void createTrie(char *str)//建樹
{
int len = strlen(str);
Trie *p = &root, *q;
for(int i = 0; i < len; i++)
{
int id = str[i] - 'a';
if(p->next[id] == NULL)//對應的位置爲空
{
q = (Trie *)malloc(sizeof(root));
q->num = 1;
for(int j = 0; j < 26; j++) q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->num++;
p = p->next[id];
}
}
}
int findTrie(char *str)
{
int len = strlen(str);
Trie *p = &root;
for(int i = 0; i < len; i++)
{
int id = str[i] - 'a';
p = p->next[id];
if(p == NULL) return 0;
}
return p->num;
}
int main()
{
char str[15];
for(int i = 0; i < 26; i++) root.next[i] = NULL;//初始化,root 不是指針
while(gets(str) && str[0] != '\0') createTrie(str);
memset(str, 0, sizeof(str));
while(scanf("%s", str) != EOF)
{
int ans = findTrie(str);
printf("%d\n", ans);
}
return 0;
}