zoukankan      html  css  js  c++  java
  • 字典树入门

    推荐博客 : http://blog.csdn.net/u013588639/article/details/38406453

         http://blog.csdn.net/king_cannon_fodder/article/details/77175620

    之所以称其为字典树,是因为它在使用的过程中就是一个类似查字典的过程,我们从第一个字母一个一个的往下面去找

    关于字典树的写法有两种,一种是用链表的形式去写,比较好懂,还有一种就是用数组的形式去写,通过结点的编号实现相连的过程。

    int ch[200010][27];  //节点编号     
    int sz;        //字典树节点个数  
    int val[200010];   //节点的值  
    void init()  
    {  
        sz=1;  
        memset(ch,0,sizeof(ch));  
        memset(val,0,sizeof(val));  
    }  
    void insert(char *s)  
    {  
        int u=0,c;  
        for(int i=0;i<strlen(s);i++)  
        {  
            c=s[i]-'a';  
            if(!ch[u][c])  
                ch[u][c]=sz++;  
            u=ch[u][c];  
            val[u]++;        //!!!  
        }  
    }  
    int query(char *s)  
    {  
        int u=0,c;  
        for(int i=0;i<strlen(s);i++)  
        {  
            c=s[i]-'a';  
            if(!ch[u][c])  
                return 0;  
            u=ch[u][c];  
        }  
        return  val[u];  
    } 
    

     此代码中注释的地方 , 可以放到 for 循环内,也可以放到 for 循环外面,根据不同的题有不同的方法,当在 for 循环内部时,用来表示的含义时 相同的前缀出现的次数,当在外面的时候给 val 变成 1 或 -1 表示这个串到这里结束。

    东北日出西边雨 道是无情却有情
  • 相关阅读:
    JQuery之在线引用
    SpringBoot之durid连接池配置
    VueJs之事件处理器
    VueJs之样式绑定
    VueJs之判断与循环监听
    PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)
    PTA 7-7 交替字符倒三角形 (10分)
    PTA 7-5 阶乘和 (10分)
    PTA 7-4 哥德巴赫猜想 (10分)
    PTA 7-3 可逆素数 (15分)
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/8558959.html
Copyright © 2011-2022 走看看