字典树本来就是一个用空间换时间的操作啊。
// 字典树.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int kind = 26;
const int maxn = 150000;
int tot;
struct node{
int prefix;
node *next[kind];
node()
{
prefix = 0;
for (int i = 0; i < 26; i++)
next[i] = NULL;
}
};
void insert(node *root, char str[])
{
int len = strlen(str);
for (int i = 0; i < len; i++){
int id = str[i] - 'a';
if (root->next[id] == NULL)
root->next[id] = new node();
root = root->next[id];
root->prefix++;
}
}
int find(node *root, char str[])
{
int len = strlen(str);
for (int i = 0; str[i]; i++){
int x = str[i] - 'a';
if (root->next[x] == NULL) return 0;
root = root->next[x];
}
return root->prefix;
}
int main()
{
char str[12];
node *root = new node();
while (gets(str))
{
if (str[0] == 0)
break;
insert(root, str);
}
while (gets(str))
{
cout << find(root, str) << endl;
}
return 0;
}