#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node
{
int count;
node *next[26];
node()
{
count=0;
memset(next,NULL,sizeof(next));
}
};
node *root;
void InSert(char *str)
{
node *p=root;
int i=0;
while(str[i])
{
int id=str[i]-'a';
if(p->next[id]==NULL) p->next[id]=new node();
p=p->next[id];
p->count++; //标记个数
i++;
}
}
void Find(char *str)
{
node *p=root;
int i=0,flag=-1;
while(str[i])
{
int id=str[i]-'a';
p=p->next[id];
if(p->count==1) { flag=i; break;} //查找时,如果此节点为1,则次节点以后不会存在>1的情况。
i++;
}
if(flag!=-1)
{
for(i=0;i<=flag;i++)
printf("%c",str[i]);
printf("\n");
}
else
puts(str);
}
void Del(node *p)
{
for(int i=0;i<26;i++)
if(p->next[i]!=NULL)
Del(p->next[i]);
delete p;
}
int main()
{
//freopen("Input.txt","r",stdin);
char str[1002][50];
int i=0;
root=new node();
while(scanf("%s",str[i])!=EOF)
{
InSert(str[i]);
i++;
}
for(int j=0;j<i;j++)
{
printf("%s ",str[j]);
Find(str[j]);
}
Del(root);
return 0;
}
poj2001(字典树)
最新推荐文章于 2021-05-31 19:34:19 发布