Trie树
Trie树
作用:高效存储和查找字符串的数据结构

#include<bits/stdc++.h>
using namespace std;
int idx;//下标
const int N=1e5;
int cnt[N];//cnt[i]表示以i结尾的单词出现次数
int son[N][26];//son[i][j]表示i的子节点j的下标
char s[N] ;//字符串
void insert(string a){
int p=0;//根节点出发
for(int i=0;a[i];i++){//遍历整个字符串
int u=a[i]-'a';//将字母转数字,可以作为数组下标
if(!son[p][u]){//不存在就插入
son[p][u]=++idx;
}
p=son[p][u];//下一层
}
cnt[p]++;//记录该单词出现次数,用结尾p做下标
}
int query(string a){
int p=0;
for(int i=0;a[i];i++){
int u=a[i]-'a';
if(!son[p][u]){
return 0;//不存在说明查不到
}
p=son[p][u];
}
return cnt[p];//单词出现个数
}
int main(){
int n;
cin>>n;
char op;//操作符
string x;
while(n--){
cin>>op;
if(op=='I') {
cin>>x;
insert(x);
}
else if(op=='Q'){
cin>>x;
cout<<query(x)<<endl;
}
}
return 0;
}

浙公网安备 33010602011771号