Trie可利用利用公共前缀存储若干长度较短(长度为10左右)的字符串,查找为O(n),可判断字符串出现的次数(存在性,查找不到说明不存在)。
模板
struct node{int num, //num可记录字符串出现的次数,也可以是一个字符串指针
next[26];
}trie[wordnum*perwordlength];
void insert(int point)
{
int len=strlen(sh), p=1;
for(int i=0; i<len; i++)
{
int t=str[i]-'a';
if(trie[p].next[t]==0)
{
tot++;
trie[p].next[t]=tot;
p=trie[p].next[t];
trie[p].num=0;
}
else
{
p=trie[p].next[t];
}
}
trie[p].num=point;
}
int find()
{
int p=1, len=strlen(str);
for(int i=0; i<len; i++)
{
int t=str[i]-'a';
if(trie[p].next[t]==0) return 0;
p=trie[p].next[t];
}
return trie[p].num;
}