原题链接:
题解:
套板子即可
详细讲解:AcWing 835. Trie字符串统计 - AcWing
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int son[N][26], cnt[N], idx;
// 0号点既是根节点,又是空节点
// son[][]存储树中每个节点的子节点
// cnt[]存储以每个节点结尾的单词数量
char str[N];
void insert(char* str) {
int p = 0;//根结点
for (int i = 0;str[i];i++) {
int u = str[i] - '0';
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] - '0';
if (!son[p][u]) return 0;
p = son[p][u];
}
return cnt[p];
}
int main() {
int n;cin >> n;
while (n--) {
char c;cin >> c;
if (c == 'I') {
cin >> str;
insert(str);
}
else {
cin >> str;
cout << query(str) << endl;
}
}
}