字典树


字典树

#include<bits/stdc++.h>
using namespace std;
int cnt = 0;
struct node{
    int num;
    int data[27];
    void init(){
        for(int i = 0;i<26;i++){
            data[i]= -1;
        }
        num = 0;
    }
}tree[1010];

void buildtree(string s){
    int p = 0;
    for(int i = 0;i<s.length();i++){
        int x = s[i]-'a';
        if(tree[p].data[x]==-1){
            tree[p].data[x] = ++cnt;
            tree[cnt].init();
        }
        p = tree[p].data[x];
        tree[p].num++;
    }
}

int quest(string s){
    int p=0;
    for(int i = 0;i<s.length();i++){
        int x = s[i]-'a';
        if(tree[p].data[x]==-1){
            return 0;
        }
        p = tree[p].data[x];
    }
    return tree[p].num;
}

int main(){
    tree[cnt].init();
    int t;
    cin>>t;
    while(t--){
        string ss;
        cin>>ss;
        buildtree(ss);
    }
    cin>>t;
    while(t--){
        string ss;
        cin>>ss;
        cout<<quest(ss)<<endl;
    }
    return 0;
}

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
1361.验证二叉树 1361.验证二叉树
1361.验证二叉树二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。 只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 tr
2020-05-07 anlen123
下一篇 
1353. 最多可以参加的会议数目 1353. 最多可以参加的会议数目
1353. 最多可以参加的会议数目给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。 你可以在满足 startDay
2020-05-07 anlen123
  目录