字典树
Summary
字典树(Trie,前缀树)把字符串集合按公共前缀组织成一棵树:从根到某节点的路径对应一个前缀,每条边代表一个字符。插入与查询一个长度为 L 的串都是 O(L),与集合大小无关。它常用于前缀检索、词频统计,也能配合异或贪心解决最大异或对一类问题。实现给出一个用二维数组存转移的结构体,支持初始化、插入与查询前缀出现次数。
参考资料
简介
字典树(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];
}
};