共有 N 个操作,所有输入的字符串总长度不超过 105,字符串仅包含小写英文字母。
输入格式
第一行包含整数 N,表示操作数。
接下来 N 行,每行包含一个操作指令,指令为
I x
或Q x
中的一种。输出格式
对于每个询问指令
Q x
,都要输出一个整数作为结果,表示 x 在集合中出现的次数。每个结果占一行。
数据范围
1≤N≤2∗104
输入样例:
5 I abc Q abc Q ab I ab Q ab
输出样例:
1 0 1
#include <iostream>
using namespace std;
constexpr int N=1e5+7;
int tir[N][26],cnt[N],idx;
char str[N];
void insert(char strr[]){
int p=0;
for(int i=0;strr[i];i++){
int u=strr[i]-'a';
if(!tir[p][u]) tir[p][u]= ++idx;
p=tir[p][u];
}
cnt[p]++;
}
int query(char strr[]){
int p=0;
for(int i=0;strr[i];i++){
int u=strr[i]-'a';
if(!tir[p][u]) return 0;
p=tir[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;
}