Trie => 高效的存储和查找字符串(集合的数据结构)
字典树的性质:
- 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
- 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
- 每个节点的所有子节点包含的字符互不相同。
两个有公共节点的字符串它们的前缀相同,所以也叫前缀树。
应用
- 字符串的插入操作
void insert()
{
int n = str.size();
int p=0;
for(int i=0;i<n;i++)
{
int u = str[i] -'a';//将a~z映射成0~25
if(!son[p][u]) son[p][u] = ++ idx;//表示该节点没有用过,说明该节点没有字符,就使用该节点。
p = son[p][u];//去到下一个节点。
}
cnt[p] ++;//结束后将最后一个单词++表示有一个这样的字符串。
}
- 字符串的个数统计
int query()
{
int n=str.size();
int p=0;
for(int i=0;i<n;i++)
{
int u = str[i] - 'a';
i