trie树

Posted KaaaterinaX

tags:

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

这dp实在是d不动了,那我先学几个数据结构!

Trie树可以用于快速存储和查找字符串集合。
而且代码非常简短,以下是一个最基础的trie树结构。

随便揪一张图片:
在这里插入图片描述
基础题的代码实现:
Shortest Prefixes

const int maxn=2e4+7;
int s[maxn][26];//s[i]['a'-'a']=v,i为当前节点编号,s[i]['a']为‘a’的子节点的编号
int idx=0;
int cnt[maxn];//每个节点出现了多少次
void insert(string x){
    int p=0;
    for(int i=0;i<x.size();i++){
        if(!s[p][x[i]-'a']){
            s[p][x[i]-'a']=++idx;
        }
        p=s[p][x[i]-'a'];
        cnt[p]++;
    }
}
void query(string x){
    int p=0;
    string ans;
    for(int i=0;i<x.size();i++){
        ans+=x[i];
        p=s[p][x[i]-'a'];
        if(cnt[p]==1)
            break;
    }
    cout<<x<<' '<<ans<<endl;
}
string x[2000];
int main(){
    //建立字典树
    string a;
    int id=0;
    while(cin>>a){
        insert(a);
        x[++id]=a;
//        if(id==12){
//            break;
//        }
    }
    for(int i=1;i<=id;i++){
        query(x[i]);
    }
}

(字典树结构是真的简单易懂,但是题目可以出得很有意思)
比如说这个题:
3485. 最大异或和
(好久之前的acwing每日一题^╮( ̄▽ ̄"")╭)

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

trie树

trie树

Trie树(字典树)整理

Trie树详解(转)

java刷题--208Trie前缀树

java刷题--208Trie前缀树