#include<bits/stdc++.h>
using namespace std;constint N =1e6+10;int son[N][26], cnt[N], idx;char ch, s[N];voidinsert(char s[]){int u =0;for(int i =0; s[i]; i ++){int v = s[i]-'a';if(son[u][v]==0) son[u][v]=++ idx;
u = son[u][v];}
cnt[u]++;}intquery(char s[]){int u =0;for(int i =0; s[i]; i ++){int v = s[i]-'a';if(son[u][v]==0)return0;
u = son[u][v];}return cnt[u];}intmain(){int n;scanf("%d ",&n);while(n --){scanf("%c %s ",&ch, s);if(ch =='I'){insert(s);}else{printf("%d\n",query(s));}}return0;}
思路对每个字符串建立字典树即可快速查询。代码#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int son[N][26], cnt[N], idx;char ch, s[N];void insert(char s[]){ int u = 0; for (int i = 0; s[i]; i ++) { int v = s[i] - 'a'; .