算法笔记——字典树
什么是字典树?
一棵字典树树就像一个小型字典一样,当你拿到一个字想去字典上查的时候(以拼音查法为例),你会先查这个拼音的开头字母,然后在按需查找他下一个字母直到找到相对应的拼音才可以。字典树也是如此,他是按照该字符串的先后顺序而来(他的查找是在每一个层中查找相对应的字符,如果能查到,下一个字符的范围将会缩小在他的子树中查找;没有查到就可退出)。具体看下面例子理解。
对于上述图片是用来寻找“aca”、“ba”相关的例子,只有在找到第一个字母之后才会往下寻找,比如上述图片中寻找“ca”这个字符串就不可能,在第一层中没有字符c,所以直接返回no。
字典树算法板子
这个板子写的时候在查找不到的情况会返回0,而不是no。
int node[100005][30];
int a[100005];
int k;
void in(string s){
int x=0;
for(int i=0;i<s.size();i++){
int y=s[i]-'a';
if(node[x][y]==0) node[x][y]=++k;
x=node[x][y];
}
a[x]++;
}
int find(string s){
int x=0;
for(int i=0;i<s.size();i++){
int y=s[i]-'a';
if(!node[x][y]) return 0;
x=node[x][y];
}
return a[x];
}
字典树例题
C-智乃的Notepad(Easy version)_2025牛客寒假算法基础集训营3
相关解析:
牛客训练营(三)补题-CSDN博客
个人感觉:
此类题目出现的时候,容易理解成栈能解决的题,会有一定思路上的障碍,要合理分析。