AcWing 835. Trie字符串统计

维护一个字符串集合,支持两种操作:

  1. “I x”向集合中插入一个字符串x;
  2. “Q x”询问一个字符串在集合中出现了多少次。

共有N个操作,输入的字符串总长度不超过1e5,字符串仅包含小写英文字母。

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

    return 0;
}

 

posted @ 2021-01-08 16:57  君与  阅读(76)  评论(0)    收藏  举报