1. 程式人生 > 其它 >【Trie】AcWing 835.Trie字串統計(Tire入門)

【Trie】AcWing 835.Trie字串統計(Tire入門)

AcWing835. Trie字串統計

題解

Trie高效儲存和查詢字串集合的資料結構

Trie樹儲存:結尾打上標記,表示為結尾

Trie樹查詢:根據逐個字元查詢,能查詢到所有字元且具有結尾標記。

#include <iostream>

using namespace std;

const int N = 1e5 + 10;

int son[N][26], cnt[N], idx;  //下標0即是根節點也是空節點

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;
    char c, str[N];
    cin >> n;
    while(n -- )
    {
        cin >> c >> str;
        if(c == 'I') insert(str);
        else cout << query(str) << endl;
    }
    return 0;
}