字典树定义
字典树又叫trie树、前缀树。是一种树形的数据结构,主要用于存储和统计大量的字符串,主要思想是利用字符串的前缀来节省存储空间。字典树主要包含两个操作:插入和查询。
存储方法
使用一个二位数组son[i][j]来存储字典树,表示位置i的下一个字符j的地址。
图解
代码
int son[N][26],cnt[N],idx=1;//idx=0时设置为根节点 不保存值。N为字符串的个数
void insert(string str)//往集合中插入字符串
{
int root=0;
for(int i=0;i<str.size();i++)
{
int x=str[i]-'a';//将字符转化为0-25的数字用于方便存储
if(!son[root][x]) son[root][x]=idx++;//如果在root下一个字符x未出现过,将其设置新地址。
root=son[root][x];//将当前地址改为下一个地址。
}
cnt[root]++;//root为单词结尾地址,将其+1表示单词出现次数+1
}
int query(string str)//返回单词出现次数
{
int root=0;
for(int i=0;i<str.size();i++)
{
int x=str[i]-'a';
if(!son[root][x]) return 0;//字典中没有当前字符串返回0;
root=son[root][x];
}
return cnt[root];
}