POJ 2001 Shortest Prefixes(字典树)

来源:互联网 发布:linux查看文件内容命令 编辑:程序博客网 时间:2024/04/23 20:35

Shortest Prefixes

题目链接:

http://poj.org/problem?id=2001

解题思路:

给你一定数量的串,然后让你求出能分辨每一个串的最小前缀。。。

用字典树存储每一个串,并作标记,直到找到一个标记为1的字母,输出即可。。。

AC代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{    int cnt;    struct node *next[26];    node()    {        cnt=0;        memset(next,0,sizeof(next));    }};node *root=NULL;char  str[1010][21];void build(char *s){    node *p=root,*tmp;    int i,l=strlen(s);    for(i=0;i<l;i++)    {        if(p->next[s[i]-'a']==NULL)        {            tmp=new node;            p->next[s[i]-'a']=tmp;        }        p=p->next[s[i]-'a'];        p->cnt++;    }}void findtrie(char *s){    node *p=root;    int i,l=strlen(s);    for(i=0;i<l;i++)    {        printf("%c",s[i]);        p=p->next[s[i]-'a'];        if(p->cnt==1)            break;    }    printf("\n");}int main(){    root=new node;    int i,num=0;    while(scanf("%s",str[num++])!=EOF)        build(str[num-1]);    for(i=0;i<num;i++)    {        printf("%s ",str[i]);        findtrie(str[i]);    }    return 0;}


1 0