字典树
字典树的定义
字典树是一种以树状结构来表示字符串的一种数据结构,通过在树上遍历,来确定给定的某一字符串是否曾经出现过。它可以最大限度的减少比较次数,在字符串比对上查询效率很高。
字典树的实现
在这里笔者采用了二维数组的方式对字典树进行构造。当然,字典树的表示方式并不只有这一种,其中以链式结构对字典树进行存储的方式最为直观。
所需数据结构
//字典树第一维所需要开辟的大小并没有确切的量度,在构建过程中,每出现一个之前没有出现的排列,字典树就要加一行。
int trie[N][26];
//tot代表着某个节点下一个节点的索引,由于数组初始化都为0,所以tot的初始值为1
int tot = 1;
建树函数实现
void insert(string s){
len=s.length();//单词s的长度
root=0;//每个单词的第一个字母都出现在字典树的第一行
for(int i=0;i<len;i++)
{
int id=s[i]-'a';
//第root行 第id列表示的是一个字母
if(!trie[root][id])//如果之前它没有出现过
trie[root][id]=++tot;//给它新添加一个编号
root=trie[root][id];//第root行 第id列中存储的值是下一个字母所在的行数
}
}
查询函数实现
bool find(string s){
int len = s.length();
root = 0;//第一个字母都存储在第0行
for(int i = 0 ; i <= len - 1;i++){
int x=s[i]-'a';
if(trie[root][x]==0) return false;//如果说root这一行中没有x这个字母,则返回失败
root=trie[root][x]; //如果有这个字母,则继续寻找下一个字母
}
return true;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏