字典树trie
操作
- 插入操作:从根节点开始,对于要插入的字符串中的每个字符,检查当前节点的子节点中是否存在该字符对应的边。如果存在,则沿着该边移动到下一个节点;如果不存在,则创建一个新的节点,并建立当前节点到新节点的边,边对应着当前字符。重复这个过程,直到字符串的所有字符都被处理完,最后在代表完整字符串的节点上做标记。
- 查找操作:同样从根节点开始,对于要查找的字符串中的每个字符,在当前节点的子节点中查找是否存在该字符对应的边。如果存在,则沿着该边移动到下一个节点;如果不存在,则说明该字符串不存在于 Trie 树中。当字符串的所有字符都被处理完后,检查最后到达的节点是否被标记为完整字符串的节点,如果是,则说明该字符串存在于 Trie 树中,否则不存在。
板子
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int ch[N][27],cnt[N];
int idx;
void insert(string s)
{
int l=s.size();
int p=0;
for(int i=0;i<l;i++)
{
int x=s[i]-'a'+1;
if(!ch[p][x])
ch[p][x]=++idx;
p=ch[p][x];
}
cnt[p]++;
}
int search(string s)
{
int l=s.size();
int p=0;
for(int i=0;i<l;i++)
{
int x=s[i]-'a'+1;
if(!ch[p][x])
return 0;
p=ch[p][x];
}
return cnt[p];
}
int main()
{
return 0;
}
本文来自博客园,作者:流氓兔LMT,转载请注明原文链接:https://www.cnblogs.com/-include-lmt/p/18741979

浙公网安备 33010602011771号