[题]Trie字符串统计 #字典树

题目

Trie字符串统计

题解

记录每个节点对应条件的字节点,达到可以不断向下遍历的要求

代码

#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 == 'I') insert(str);
        else printf ("%d\n", query(str));
    }
    return 0;
}

你可能感兴趣的:(算法,题,c++)