AcWing 835. Trie字符串统计
原题链接
简单
作者:
ls131
,
2020-05-31 20:45:16
,
所有人可见
,
阅读 497
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int son[N][26]; //在一张trie树上不断结果 二维是下一个字符肯定是26个字符中一个 用数字记录字符
int cnt[N];
int idx; //记录一个字符串的第几层竖向点
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]-'a';
if(!son[p][u]) return 0;
p=son[p][u];
}
return cnt[p];
}
int main(){
int n;
scanf("%d",&n);
while(n--){
char op[2];
scanf("%s%s",op,str);
if(*op=='I') insert(str);
else printf("%d\n",query(str));
}
return 0;
}