字典树
参考资料
简介
字典树(Trie),又称前缀树,把字符串集合按公共前缀组织成一棵树:从根到某节点的路径对应一个前缀,每条边代表一个字符。插入与查询一个长度为 的串都是 ,与集合大小无关。常用于前缀检索、词频统计,以及配合异或贪心解决最大异或对等问题。
实现
struct Trie
{
int T[N][M],val[N];
int cnt=0;
void init()
{
for(int i=0;i<=cnt;i++)
{
memset(T[i],0,sizeof T[i]);
val[i]=0;
}
cnt=0;
}
void insert(string s)
{
int u=0;
for(auto c:s)
{
int &v=T[u][c];
if(!v)v=++cnt;
val[u=v]++;
}
}
int query(string s)
{
int u=0;
for(auto c:s)
{
int v=T[u][c];
if(!v)return 0;
u=v;
}
return val[u];
}
};