#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int a[N][26]; //因为这题是小写的26个字母,所以我们二维写的便是26; int idx; //idx用来统计新出现的节点的个数。 int cnt[N]; //统计字符串的次数 char str[N]; //输入的字符串 void insert(char *str) { int p=0; for(int i=0; str[i]; i++) { int u=str[i]-'a'; if(!a[p][u])//如果当前节点不存在,就相当于这里没有往下的路,那么就相当于我们给他创建一条路。 { a[p][u]=++idx; } p=a[p][u]; } cnt[p]++; /。这里可以统计当前这个字符串出现的次数 } int query(char *str) { int p=0; for(int i=0; str[i]; i++) { int u=str[i]-'a'; if(!a[p][u]) { return 0;//如果这个节点的值为0,那么说明他不存在这条路,也就是说不存在这样的字符串。返回0 } p=a[p][u]; } return cnt[p]; } int main() { int n; cin>>n; while(n--) { char b; cin>>b; if(b=='Q') { cin>>str; cout<<query(str)<<endl; } else { cin>>str; insert(str); } } return 0; }