- 用 “0” 来表示 “根节点(root)”。
- 存入一个字符串时,会在字符串最后结尾的那个字符节点打上标记。比如:字符串 “abcd” 是以字符 “d” 结尾的,那么就在字符节点 “d” 打上标记。
左边数组初始全是0
添加字符串`”abc“,
'a'
)映射的数字(0~25)'a'
这个节点指向的节点, 我们就需要新建一个节点,然后我们把 ++idx
填写到这个节点上,第一次是1#include
using namespace std;
const int N = 100010;
int son[N][26], cnt[N], idx;
char str[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] ++;
}
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()
{
int n;
scanf("%d", &n);
while(n --)
{
char op[2];
scanf("%s%s", op, str);
if(op[0] == 'I') insert(str);
else printf("%d\n", query(str));
}
return 0;
}