什么是Trie树
trie,又称前缀树或字典樹,是一种有序树,用于保存关联数组,其中的键通常是字符串。 与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。 一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。
Trie字符串统计
#include<iostream>
using namespace std;
const int N = 1e5+10;
int son[N][26] , cnt[N],idx;//下标是0的点,既是根节点,又是空节点
char str[N];
void insert(char str[]){
int p = 0;
for(int i = 0; str[i]; i ++){
int u = str[i] - 'a';
if(!son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
cnt[p] ++ ;
}
int query(char str[]){
int p = 0;
for(int i = 0; str[i]; i ++ ){
int u = str[i];
if(!son[p][u]) return 0;
p = son[p][u];
}
return cnt[p];
}
int main(){
int n;
cin>>n;
while(n -- ){
char op[2];
cin>>op>>str;
if(op[0] == 'I') insert(str);
else printf("%d
",query(str));
}
return 0;
}