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

 #include<bits/stdc++.h>
using namespace std;
const int amn=1e5+;
int trie[amn][],tid;
bool isw[amn];
int sum[amn];
void init(){
memset(isw,,sizeof isw);
memset(trie,,sizeof trie);
memset(sum,,sizeof sum);
tid=; ///节点在整个树中的序号
}
void insert(char *s){ ///插入一个单词,如果想查询后缀就反向插入
int len=strlen(s),rt=;
for(int i=;i<len;i++){
int id=s[i]-'a'; ///看选择当前节点的哪个儿子
if(!trie[rt][id])
trie[rt][id]=++tid;
sum[rt]++; ///前缀统计
rt=trie[rt][id];
}
isw[rt]=; ///结尾单词标记
}
bool isword(char *s){ ///查询是否存在这个单词
int len=strlen(s),rt=;
for(int i=;i<len;i++){
int id=s[i]-'a';
if(!trie[rt][id])return ;
rt=trie[rt][id];
}
return isw[rt];
}
bool isprefix(char *s){ ///查询是否存在这个前缀
int len=strlen(s),rt=;
for(int i=;i<len;i++){
int id=s[i]-'a';
if(!trie[rt][id])return ;
rt=trie[rt][id];
}
return ;
}
int prefix_sum(char *s){///查询当前前缀出现的次数
int len=strlen(s),rt=;
for(int i=;i<len;i++){
int id=s[i]-'a';
if(!trie[rt][id])return ;
rt=trie[rt][id];
}
return sum[rt];
}
int main(){
init();
char *s="hello",*s1="he";
insert(s);
printf("isword:%d isprefix:%d prefix_sum:%d\n",isword(s),isprefix(s1),prefix_sum(s1));
}

最新文章

  1. MySQL NoInstall 配置
  2. Chrome必备的扩展
  3. Oracle RAC客户端tnsnames.ora相关配置及测试
  4. POJ1201 Intervals[差分约束系统]
  5. visio二次开发初始化问题
  6. jquery-ajax完整写法
  7. nginx作为负载均衡服务器——测试
  8. Xcode插件VVDocumenter Alcatraz KSImageNamed等安装
  9. RCNN 和SPPnet的对比
  10. CF_402D Upgrading Array 因式分解
  11. linux下Rtree的安装
  12. 解决phpstorm ftp自动保存文件问题
  13. &quot;《算法导论》之‘队列’&quot;:队列的三种实现(静态数组、动态数组及指针)
  14. FatMouse&#39; Trade -HZNU寒假集训
  15. windows PHP 安装 redis 外加扩展
  16. Python 中关于Random的使用方法
  17. (二)校园信息通微信小程序从后台获取首页的数据笔记
  18. tensorflow(4)踩过的一些坑
  19. ORM版学员管理系统
  20. zepto的ready方法

热门文章

  1. android-interview
  2. 【bzoj3441】乌鸦喝水
  3. SYC极客大挑战部分题目writeup
  4. C++扬帆远航——16(猜数字)
  5. python画一颗拳头大的&#128151;
  6. spring——AOP原理及源码(三)
  7. 从零认识 DOM (一): 对象及继承关系
  8. JS动画之缓动函数分析及动画库
  9. echarts 图点击事件
  10. 2020ubuntu1804server编译安装redis5笔记(二)配置redis