poj 2001(trie)
来源:互联网 发布:光电材料仿真软件 编辑:程序博客网 时间:2024/06/06 10:38
题意:给一些单词,输出每个单词的一个前缀使这个前缀能唯一标识这个单词。
题解:先建字典树,用val[i]保存当前节点是多少个单词的前缀,然后再从头把每个单词放到字典树里查询,直到val[i]==1结束,表示到这里只能标识唯一单词,当前位置就是要输出的前缀的结尾位置。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 40005;char str[N][30];int ch[N][30], val[N];int sz;void insert(char *s) { int u = 0, len = strlen(s); for (int i = 0; i < len; i++) { int k = s[i] - 'a'; if (!ch[u][k]) { memset(ch[sz], 0, sizeof(ch[sz])); val[sz] = 1; ch[u][k] = sz++; } else val[ch[u][k]]++; u = ch[u][k]; }}void query(char *s) { int u = 0, len = strlen(s); for (int i = 0; i < len; i++) { int k = s[i] - 'a'; if (val[ch[u][k]] == 1) { if (i < len) printf("%c", s[i]); break; } else printf("%c", s[i]); u = ch[u][k]; }}int main() { int cnt = 0; sz = 1; memset(ch[0], 0, sizeof(ch[0])); while (scanf("%s", str[cnt]) == 1) { insert(str[cnt]); cnt++; } for (int i = 0; i < cnt; i++) { printf("%s ", str[i]); query(str[i]); printf("\n"); } return 0;}
0 0
- POJ 2001 Trie树
- poj 2001 trie 树
- poj 2001(trie)
- poj 2001(trie)
- POJ 2001 TRIE
- poj 2001 Trie树
- POJ 2001 Trie 字典树
- POJ 2001 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]
- zoj 2346 || poj 2001 Shortest Prefixes(Trie~!)
- poj 2001 Shortest Prefixes Trie树
- POJ-2001(trie字典树)
- Trie 字典树 poj 2001 示例
- Trie 字典树 poj 2001 示例
- Objective-C之run loop详解
- 华为面试题 输入一个n,在屏幕上输出N*N的矩阵
- 数组和集合拾遗
- 第三周项目1-顺序表的基本运算
- [java语言]java的多维数组的copy
- poj 2001(trie)
- Java并发编程:如何创建线程
- android 禁止listview 的ITEM被点击
- select ... for update& lock in share mode加锁情况
- Android 状态栏沉浸式的实现
- Centos 安装五笔
- 分享一个Swift语言的逆波兰表达式计算器的实现
- 关于解决启动项丢失问题
- [leetcode127]Word Ladder Problem