#include<iostream>
using namespace std;
const int N=20010;
int idx,son[N][26],cnt[N];//cnt[]记录字符串结尾
char s[N];
void insert(char s[])
{
int p=0;//根节点查找
for(int i=0;s[i];i++)//遍历每一个字符
{
int x=s[i]-'a';//字符转换成数字:-'a'
if(son[p][x]==0) son[p][x]=++idx;//字符不存在树中就插入
p=son[p][x];//向下查找
}
cnt[p]++;//字符串结尾记录
}
int query(char s[])
{
int p=0;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(son[p][x]==0) return 0;
p=son[p][x];
}
return cnt[p];//cnt[p]==0 代表不存在这个字符 不为0 代表出现过,返回次数
}
int main()
{
int m;
scanf("%d",&m);
while(m--)
{
char c;
cin>>c>>s;
if(c=='I') insert(s);
else printf("%d\n",query(s));
}
return 0;
}
acwing 853Trie字符串统计
最新推荐文章于 2024-09-14 13:16:14 发布