Trie树 [Hihocoder]

Posted Michael-zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Trie树 [Hihocoder]相关的知识,希望对你有一定的参考价值。

输入
输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。

在20%的数据中n, m<=10,词典的字母表大小<=2.
在60%的数据中n, m<=1000,词典的字母表大小<=5.
在100%的数据中n, m<=100000,词典的字母表大小<=26.

本题按通过的数据量排名哦~

输出
对于小Hi的每一个询问,输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。

样例输入

5
babaab
babbbaaaa
abba
aaaaabaa
babaababb
5
babb
baabaaa
bab
bb
bbabbaab

样例输出
1
0
3
0
0
代码如下:(包括Trie树的建立,插入、查找)

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class node
    public:
    node()
        for(int i=0;i<26;i++)
        next[i]=NULL;
        count=1;
    
    node* next[26];
    int count;
;
class tree
    public:
    tree()
        root=new node();
    
    void insert(string &word);
    int search(string &word);
    private:
    node *root;
;
void tree::insert(string &word)
    int len=word.length();
    node *proot=root;
    for(int i=0;i<len;i++)
        if(proot->next[word[i]-'a']==NULL)
        proot->next[word[i]-'a']=new node();
        else proot->next[word[i]-'a']->count++;
        proot=proot->next[word[i]-'a'];
    

int tree::search(string &word)
    int len=word.length();
    node *proot=root;
    for(int i=0;i<len;i++)
        if(proot->next[word[i]-'a']==NULL)
        return 0;
        proot=proot->next[word[i]-'a'];
    
    return proot->count;

int main()
    int n;
    string word;
    tree T;
    cin>>n;
    while(n--)
        cin>>word;
        T.insert(word);
    
    cin>>n;
    while(n--)
        cin>>word;
        cout<<T.search(word)<<endl;
    
    return 0;

以上是关于Trie树 [Hihocoder]的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder Trie树

HihoCoder Trie树 java实现

hihoCoder 1014 Trie树

hihocoder1014 : Trie树

hihoCoder 1014 : Trie树(字典树)

Trie树 [Hihocoder]