题目:
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int son[N][26],cnt[N],idx;
char str[N];
void insert(char c[]){
int p=0;
for(int i=0;c[i];i++){
int x=c[i]-'a';
if(!son[p][x])son[p][x]=++idx;
p=son[p][x];
}
cnt[p]+=1;
}
int find(char c[]){
int p=0;
for(int i=0;c[i];i++){
int x=c[i]-'a';
if(!son[p][x])return 0;
p=son[p][x];
}
return cnt[p];
}
int main(){
int n;
scanf("%d",&n);
while(n--){
char op;
scanf(" %c%s",&op,str);
if(op=='I')insert(str);
else printf("%d\n",find(str));
}
return 0;
}
题后反思:
字典树就是将字符串整体打散了按照每个字符出现的位置按分开按层存储。