最近在扩充知识量,疯狂学习模板
贴一个trie树模板,里边26可改动,这里仅针对小写字母
#include <bits/stdc++.h>
using namespace std;
typedef struct Trie
{
int v;
Trie *next[26];
} Trie;
Trie 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->v = 1;
for(int j=0; j<26; ++j)
q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->v++;
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->v;
}
int main()
{
//freopen("1.txt", "r", stdin);
char str[30];
int i,n;
for(i=0; i<26; ++i)
root.next[i] = NULL;
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%s", str);
createTrie(str);
}
memset(str, 0, sizeof(str));
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%s", str);
int ans = findTrie(str);
printf("%d\n", ans);
}
return 0;
}