zoukankan      html  css  js  c++  java
  • [模板] trie树 (字典树)

    本文基于https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int amn=1e5+5;
     4 int trie[amn][26],tid;
     5 bool isw[amn];
     6 int sum[amn];
     7 void init(){
     8     memset(isw,0,sizeof isw);
     9     memset(trie,0,sizeof trie);
    10     memset(sum,0,sizeof sum);
    11     tid=0;  ///节点在整个树中的序号
    12 }
    13 void insert(char *s){   ///插入一个单词,如果想查询后缀就反向插入
    14     int len=strlen(s),rt=0;
    15     for(int i=0;i<len;i++){
    16         int id=s[i]-'a';    ///看选择当前节点的哪个儿子
    17         if(!trie[rt][id])
    18             trie[rt][id]=++tid;
    19         sum[rt]++;  ///前缀统计
    20         rt=trie[rt][id];
    21     }
    22     isw[rt]=1;  ///结尾单词标记
    23 }
    24 bool isword(char *s){   ///查询是否存在这个单词
    25     int len=strlen(s),rt=0;
    26     for(int i=0;i<len;i++){
    27         int id=s[i]-'a';
    28         if(!trie[rt][id])return 0;
    29         rt=trie[rt][id];
    30     }
    31     return isw[rt];
    32 }
    33 bool isprefix(char *s){ ///查询是否存在这个前缀
    34     int len=strlen(s),rt=0;
    35     for(int i=0;i<len;i++){
    36         int id=s[i]-'a';
    37         if(!trie[rt][id])return 0;
    38         rt=trie[rt][id];
    39     }
    40     return 1;
    41 }
    42 int prefix_sum(char *s){///查询当前前缀出现的次数
    43     int len=strlen(s),rt=0;
    44     for(int i=0;i<len;i++){
    45         int id=s[i]-'a';
    46         if(!trie[rt][id])return 0;
    47         rt=trie[rt][id];
    48     }
    49     return sum[rt];
    50 }
    51 int main(){
    52     init();
    53     char *s="hello",*s1="he";
    54     insert(s);
    55     printf("isword:%d isprefix:%d prefix_sum:%d
    ",isword(s),isprefix(s1),prefix_sum(s1));
    56 }
  • 相关阅读:
    AngularJS总结
    网页的颜色表示方法
    计算机中的字符编码
    计算机中的进制
    常用的HTML 标签二
    常用的HTML标签
    常用的字符实体标记
    一个请求的访问流程
    http请求访问过程
    codeforces 269C Flawed Flow(网络流)
  • 原文地址:https://www.cnblogs.com/Railgun000/p/11259933.html
Copyright © 2011-2022 走看看