#include <iostream>
using namespace std;
const int N = 100000 + 10;
int son[N][26], cnt[N], idx; // 0 既是root又是null
char s[N];
void insert(char str[])
{
int p = 0;
for (int i = 0; str[i]; i++)
{
int u = str[i] - 'a';
if (!son[p][u]) son[p][u] = ++idx; //如果节点不存在就创建它
p = son[p][u];
}
cnt[p]++; //统计以当前字母结尾的单词数
}
/**返回Trie树种str的数量*/
int query(char str[])
{
int p = 0;
for (int i = 0; str[i]; i++)
{
int u = str[i] - 'a';
if (!son[p][u]) return 0;
p = son[p][u];
}
return cnt[p];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
while (n--)
{
char op[2];
cin >> op >> s;
if (op[0] == 'Q') cout << query(s) << endl;
else insert(s);
}
}
Trie树
最新推荐文章于 2024-08-16 10:27:08 发布