1. 首页
  2. 模板

字典树模板

const int MAXN=100100;

char s[MAXN],q[MAXN];
struct Trie
{
    int next[3000100][26],end[3000100];
    int root,L;
    int newnode()
    {
        for(int i=0; i<26; i++) next[L][i]=-1;
        end[L++]=0;
        return L-1;
    }
    void init()
    {
        L=0;
        root=newnode();
    }
    void insert(char *buf)
    {
        int len=strlen(buf);
        int now=root;
        for(int i=0; i<len; i++)
        {
            if(next[now][buf[i]-'a']==-1)
                next[now][buf[i]-'a']=newnode();
            now=next[now][buf[i]-'a'];
            end[now]++;
        }
    }
    void del(char *buf)
    {
        int len=strlen(buf);
        int now=root,x=0,pre=0;
        for(int i=0; i<len; i++)
        {
            pre=now;
            if(next[now][buf[i]-'a']==-1) return ;
            now=next[now][buf[i]-'a'];
        }
        x=end[now];
        now=root;
        for(int i=0; i<len; i++)
        {
            now=next[now][buf[i]-'a'];
            end[now]-=x;
        }
        next[pre][buf[len-1]-'a']=-1;
    }
    bool query(char *buf)
    {
        int len=strlen(buf);
        int now=root;
        for(int i=0; i<len; i++)
        {
            if(next[now][buf[i]-'a']==-1) return false;
            now=next[now][buf[i]-'a'];
            if(end[now]==0) return false;
        }
        return true;
    }
} T;

 

评分 0, 满分 5 星
0
1
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.carlstedt.cn/archives/947 (转载时请注明本文出处及文章链接)
上一篇:
:下一篇

发表评论

gravatar

快来吐槽一下吧!

  1. .01 4:06
  2. .02 1:47
  3. .03 3:39
  4. .04 1:40