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 }
  • 相关阅读:
    CentOS6.5安装Qt4.8.6+QtCreator2.6.1
    利用C++调用天气webservice-gSOAP方法
    win7_32下编译FFmpeg
    CentOS下yum安装FFmpeg
    Windows下编译live555源码
    live555笔记_hi3516A
    大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等
    置顶博客
    Linux之GDB学习
    Linux之RTOS学习
  • 原文地址:https://www.cnblogs.com/Railgun000/p/11259933.html
Copyright © 2011-2022 走看看