博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shortest Prefixes
阅读量:5236 次
发布时间:2019-06-14

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

                                                             Shortest Prefixes

Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u

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
struct node{ struct node *next[26]; int time;};struct node *newnode(){ int i; struct node *p; p=(struct node *)malloc(sizeof(struct node)); p->time=0; for(i=0;i<26;i++) p->next[i]=NULL; return p;};void insert(struct node *root, char *s){ struct node *p; p=root; int i,len,t; len=strlen(s); for(i=0;i
next[t]==NULL) { p->next[t]=newnode(); } p=p->next[t]; p->time++; }}void search(struct node *root, char *s ){ struct node *p; p = root; int i, len; len = strlen(s); for(i=0; i
next[s[i]-'a']==NULL) return ; p = p->next[s[i]-'a']; if(p->time >1) { printf("%c", s[i] ); } if(p->time ==1) { printf("%c", s[i] ); return ; } }}int main(){ int i; char s[1002][22]; struct node *tree; //ÀàËÆ(Í·½Úµã)»òÕß(¸ù½Úµã) tree = newnode(); int e=0; while(gets(s[e])!=NULL) { insert(tree,s[e++]); } for(i=0; i

 

转载于:https://www.cnblogs.com/yspworld/p/3883766.html

你可能感兴趣的文章
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书_2019年
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>
721. Accounts Merge
查看>>
「Unity」委托 将方法作为参数传递
查看>>
重置GNOME-TERMINAL
查看>>
redis哨兵集群、docker入门
查看>>