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;
}