#include <bits/stdc++.h>
using namespace std;
//对于字符串比较多的要统计个数的,map被卡的情况下,直接用字典树
//很多题都是要用到节点下标来表示某个字符串
const int maxn =2e6+5;//如果是64MB可以开到2e6+5,尽量开大
int tree[maxn][30];
int fg[maxn];//标记是否为单词结束
int tot;
void insert (char *s){
int len = strlen(s);
int root = 0;
for (int i = 0; i < len; ++i){
int id = s[i] - 'a';
if (!tree[root][id]) tree[root][id] = ++tot;
root = tree[root][id];
}
fg[root] = true;
}
bool _find(char *s){//查询 可改
int len = strlen(s);
int root = 0;
for (int i=0;i<len;++i){
int id = s[i] - 'a';
if (!tree[root][id]) return false;
root = tree[root][id];
}
return true;
}
void init(){//节省时间的清空
for (int i=0;i<=tot;++i){
fg[i] = 0;
for (int j=0;j<26;++j) tree[i][j] = 0;
}
tot = 0;//RE可能是这里有问题
}
Trie树模板
最新推荐文章于 2022-08-08 06:00:13 发布