POJ 2001 Shortest Prefixes (Trie)
来源:互联网 发布:java anti csrf token 编辑:程序博客网 时间:2024/06/06 04:26
题意:给你n个字符串(n<=1e3),求每个字符串的非公共前缀,如果不存在就输出本身。
思路:字典树中的val记录前缀数量,如果val==1就说明只有这个字符串本身有这前缀,也就是答案。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 27;const int maxnode = 20*1000+5;int ch[maxnode][maxn], val[maxnode], sz;char str[1005][maxn];void init(){ sz = 1; memset(ch[0], 0, sizeof(ch[0]));}void Insert(char *s){ int u = 0; int len = strlen(s); for(int i = 0; i < len; i++) { if(ch[u][s[i]-'a'] == 0) { memset(ch[sz], 0, sizeof(ch[sz])); val[sz] = 0; ch[u][s[i]-'a'] = sz++; } u = ch[u][s[i]-'a']; val[u]++; }}void Match(char *s){ int u = 0; int len = strlen(s); for(int i = 0; i < len; i++) { if(val[ch[u][s[i]-'a']] == 1) { printf("%s ", s); for(int j = 0; j <= i; j++) printf("%c", s[j]); printf("\n"); return ; } u = ch[u][s[i]-'a']; } printf("%s %s\n", s, s);}int main(void){ int cnt = 0; init(); while(gets(str[cnt]) != NULL) { Insert(str[cnt]); cnt++; } for(int i = 0; i < cnt; i++) Match(str[i]); return 0;}
阅读全文
1 0
- poj 2001 Shortest Prefixes(Trie树)
- poj 2001 Shortest Prefixes(trie树)
- POJ 2001 - Shortest Prefixes (Trie树)
- poj 2001 Shortest Prefixes(trie树)
- POJ-2001 Shortest Prefixes(Trie树)
- POJ 2001 Shortest Prefixes (Trie)
- poj 2001 Shortest Prefixes (Trie树)
- poj 2001 Shortest Prefixes(Trie)
- poj 2001 Shortest Prefixes trie
- poj 2001 Shortest Prefixes Trie
- POJ 2001 Shortest Prefixes // Trie
- [poj 2001]Shortest Prefixes [Trie]
- POJ Shortest Prefixes (Trie)
- POJ 2001 Shortest Prefixes (字典树 TRIE)
- zoj 2346 || poj 2001 Shortest Prefixes(Trie~!)
- poj 2001 Shortest Prefixes Trie树
- poj 2001 Shortest Prefixes Trie树
- POJ 2001 Shortest Prefixes 字典树Trie
- 利用XX-Net 设置Git 代理
- C语言二分法查找
- C++11新特性——结构体内直接赋初始值
- 在红帽linux9虚拟机上安装JDK
- 机器人操作系统(ROS)在线实训平台学习实验指南
- POJ 2001 Shortest Prefixes (Trie)
- c语言基础知识整理(二)
- Reverse Integer
- 32位和64位的区别(james-lx)
- Tomcat简介
- jQuery选择器用法总结
- 20170706
- Zookeeper简单介绍
- Flask在不同页面间传递参数