博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2001 Shortest Prefixes【第一棵字典树】
阅读量:6243 次
发布时间:2019-06-22

本文共 2784 字,大约阅读时间需要 9 分钟。

Description

A prefix of a string is a substring starting at the beginning of the given string. The prefixes of "carbon" are: "c", "ca", "car", "carb", "carbo", and "carbon". Note that the empty string is not considered a prefix in this problem, but every non-empty string is considered to be a prefix of itself. In everyday language, we tend to abbreviate words by prefixes. For example, "carbohydrate" is commonly abbreviated by "carb". In this problem, given a set of words, you will find for each word the shortest prefix that uniquely identifies the word it represents. 
In the sample input below, "carbohydrate" can be abbreviated to "carboh", but it cannot be abbreviated to "carbo" (or anything shorter) because there are other words in the list that begin with "carbo". 
An exact match will override a prefix match. For example, the prefix "car" matches the given word "car" exactly. Therefore, it is understood without ambiguity that "car" is an abbreviation for "car" , not for "carriage" or any of the other words in the list that begins with "car". 

Input

The input contains at least two, but no more than 1000 lines. Each line contains one word consisting of 1 to 20 lower case letters.

Output

The output contains the same number of lines as the input. Each line of the output contains the word from the corresponding line of the input, followed by one blank space, and the shortest prefix that uniquely (without ambiguity) identifies this word.

Sample Input

carbohydratecartcarburetorcaramelcariboucarboniccartilagecarboncarriagecartoncarcarbonate

Sample Output

carbohydrate carbohcart cartcarburetor carbucaramel caracaribou caricarbonic carbonicartilage carticarbon carboncarriage carrcarton cartocar carcarbonate carbona 题意:就是找出所给的单词的独一无二的前缀,并且保证最短... 思路:字典树实现 代码如下:
#include
#include
#include
char ch[1005][25]; struct node{ int cnt; node *next[27];}*root; void Maketree(char *str){ int ans, i, len; node *p, *q; p=root; len=strlen(str); for(i=0; i
next[ans]!=NULL) { p=p->next[ans]; p->cnt++; } else { q=(node *)calloc(1, sizeof(node)); p->next[ans]=q; p=q; p->cnt=1; } }}void Findtree(char *str){ int i, len, ans; node *p; p=root; len=strlen(str); for(i=0; i
next[ans]; printf("%c", str[i]); if(p->cnt==1) break; } printf("\n");} int main(){ int n=0, i; root=(struct node *)calloc(1, sizeof(node)); while(scanf("%s", ch[n])!=EOF) { Maketree(ch[n]); n++; } for(i=0; i

转载于:https://www.cnblogs.com/Hilda/archive/2012/08/13/2635842.html

你可能感兴趣的文章
Java:JUnit包
查看>>
unity_快捷键
查看>>
洛谷P3358 最长k可重区间集问题(费用流)
查看>>
洛谷P1251 餐巾计划问题(费用流)
查看>>
Beta冲刺(2/5)(麻瓜制造者)
查看>>
vs2012编码的UI测试使用教程
查看>>
android 在非UI线程更新UI仍然成功原因深入剖析
查看>>
清北NOIP训练营集训笔记——图论
查看>>
oracle ORA-00060死锁查询、表空间扩容
查看>>
转载自https://github.com/jsfront/src/blob/master/css.md
查看>>
MySQL索引优化分析(上)
查看>>
jquery $().each,$.each的区别
查看>>
sql server 2000/2005 游标的使用操作(转)
查看>>
Tomcat 部署 Web 通过 ip 直接访问项目
查看>>
Cache Fusion
查看>>
bzoj2502
查看>>
Xcode 控制台打印Unicode字符串转换为中文
查看>>
Codeforces 831C--Jury Marks (思维)
查看>>
oracle内存结构+系统全局区+程序全局区(pga)+排序区+大型池+java池
查看>>
成长7 - lambda,filter,map的运用
查看>>