某Trie树的简单例题
来源:互联网 发布:ajax.js 代码下载 编辑:程序博客网 时间:2024/06/08 10:20
初学Trie树!解决字符串前缀问题的法宝!
T1:poj2001:Shortest Prefixes
题意:给一堆字符串,问每个字符串最短的不与其他字符串前缀重复的前缀(好奇怪的表述QAQ
貌似“字符串前缀”之类的先考虑Trie树就好了。。。
思路:建Trie树,每路过一个点该点cnt++;最后查询时发现cnt==1的点则为目标,如果找到最后还不行,就直接输出。
代码:
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#define cls(x) memset(x,0,sizeof x)const int maxn = 1010;using namespace std;struct trie{ int next[27]; int cnt;}node[maxn<<5];char c[maxn][25];int tot;void add(char* str){ int rt=0; for(int i=0;str[i]!='\0';i++) { int x=str[i]-'a'; if(node[rt].next[x]) rt=node[rt].next[x]; else { node[rt].next[x]=++tot; rt=tot; } node[rt].cnt++; }}void query(char *str){ int rt=0; char b[100];cls(b); for(int i=0;str[i]!='\0';i++) { int x=str[i]-'a'; if(node[rt].cnt==1) { printf("%s\n",b); return ; } rt=node[rt].next[x]; b[i]=str[i]; //Trie树节点是空的,边上是字符,这句话要放在最后而不是前面 } printf("%s\n",str); return ;}int main(){ int amt=0; while(~scanf("%s",c[++amt])) add(c[amt]); amt--; // 不要问这是什么。。。EOF时amt也++了 for(int i=1;i<=amt;i++) { printf("%s ",c[i]); query(c[i]); } return 0;}
1 0
- 某Trie树的简单例题
- Trie 树的简单实现
- 最简单的trie树
- Trie树的简单应用
- trie 树的简单实现
- 初识Trie树--最简单的Trie树介绍
- 最小生成树的简单例题
- 简单的触发器例题
- 一个Trie字典树的简单实现
- 一个简单的Trie树实现
- trie树的一个简单例子源码
- Trie树的建立与简单应用
- 一个Trie树的简单实现
- 字典树Trie的简单题目
- 字典树(Trie)的简单实现
- Trie树的C++简单实现
- 简单的trie实现
- 【Trie的模板】例题11 LA3942 Remember the Word(字典树+dp)
- 【bzoj2120】数颜色
- Javascript基础知识盲点总结——继承
- 国内使用东软镜像更新Android SDK很方便
- 哈理工OJ 2002 幂集(DP问题)
- c++第6次作业
- 某Trie树的简单例题
- Java大牛养成记(8)——何为servlet?
- 一步一步教你用CSS画爱心
- hdu 5701 中位数计数(重构数组)
- javaScript入门--为什么学?
- 用Spark往Kafka里面写对象设计与实现
- 动态规划 DAG模型 硬币问题
- Ubuntu 中使用root权限复制粘贴文件
- iOS: initwithframe什么时候会被调用?