POJ 2001:Shortest Prefixes(字典树入门)
来源:互联网 发布:新晨药业医药代表知乎 编辑:程序博客网 时间:2024/06/06 12:42
题目链接:http://poj.org/problem?id=2001
题目翻译:
POJ 2001:最短前缀
前缀是一个字符串是一个给定字符从第一字符开始的字串。例如:carbon的前缀有,c,ca,car,carb,carbo,carbon等。
PS:在这个问题中空字符串不看作前缀。但是每一个非空的字符串它自身可以看作自身的一个前缀。在每种语言中,我们倾向于用前缀来代表这个单词的缩写,例如"carhohydrate"常常缩写成carb.在这个题目中,我们给出一系列单词,你需要找到可以唯一代表每个单词的最短前缀.
我的第一道字典树题目:
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;char ans[100];char str[1005][25];const int maxn = 26;typedef struct TrieNode ///字典树节点声明{ int ccount; ///该节点代表的单词是多少个单词的前缀 struct TrieNode *son[maxn]; ///26个儿子。}Trie;void insertWord(Trie *root,char word[]) ///将单词word插入到字典树{ Trie *p = root; ///辅助指针 int i = 0; char ch = word[i]; while(ch != '\0') { if(p->son[ch-'a']==NULL) ///如果这个字符不存在,建立节点 { Trie *node = (Trie*)malloc(sizeof(Trie)); for(int i = 0; i < maxn; i++) ///该节点的所有儿子置为空 { node->son[i] = NULL; } node->ccount = 1; ///新建立的节点,以该节点所代表单词为前缀的单词当前只有一个 p->son[ch-'a'] = node; p = p->son[ch-'a']; } else { p->son[ch-'a']->ccount++; p = p->son[ch-'a']; } ch = word[++i]; } ///p->ccount = 1; 去掉这句话就AC了,Why,感觉完全没关系,原来写上这一句我WA了三次。}void findWord(Trie *root,char word[]){ int i = 0; char ch = word[i]; Trie *p = root; ///辅助指针p while(p!=NULL && ch!='\0') { p = p->son[ch-'a']; ans[i++] = ch; if(p->ccount == 1) break; ch = word[i]; } ans[i] = '\0';}///释放字典树void freeTrie(Trie *root){ for(int i = 0; i < maxn; i++) { if(root->son[i]!=NULL) freeTrie(root->son[i]); } free(root);}int main(){ Trie *root=(Trie*)malloc(sizeof(Trie)); for(int i = 0; i < maxn; i++) { root->son[i] = NULL; } int i = 0; while(scanf("%s",str[i])!=EOF) { insertWord(root,str[i]); i++; } for(int j = 0; j < i; j++) { findWord(root,str[j]); printf("%s %s\n",str[j],ans); } freeTrie(root); return 0;}
阅读全文
0 0
- POJ 2001 Shortest Prefixes(字典树入门)
- POJ 2001:Shortest Prefixes(字典树入门)
- POJ 2001:Shortest Prefixes(字典树)
- poj 2001 -- Shortest Prefixes ( 字典树 )
- POJ 2001-Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- POJ - 2001 - Shortest Prefixes (字典树!!)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- 【POJ】2001 - Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- poj 2001Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- 51Nod-1244-莫比乌斯函数之和
- 【dp】HDU
- 关联分析—Apriori算法
- 第一个Servlet程序
- 问题 G: Watch Dog
- POJ 2001:Shortest Prefixes(字典树入门)
- Kafka (二)安装相关教程
- 创建PDF模板,java添加内容、导出下载PDF
- 关于spring 配置以及整合 mybatis 的一些个人总结
- [Leetcode] 351. Android Unlock Patterns 解题报告
- MP4文件格式详解——元数据moov(一)mvhd box
- 小ho的01串
- 线段树模板
- 迭代器常用用法