trie树

支持两个操作,插入和查询;


#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int son[N][26];
int cnt[N];
int idx;
char op[2];
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;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
       	scanf("%s%s ",&op,&str);       
        if(op[0]=='I')
            insert(str);//插入操作
        else printf("%d\n",query(str));
    }

    return 0;
}

posted @ 2020-08-26 10:17  邦的轩辕  阅读(33)  评论(0编辑  收藏  举报