题意:给出若干字符串,求每个字符串在所有字符串中唯一的最短前缀;
思路:将所有串插入字典树,对于每个串枚举前缀,查找唯一前缀;
#include#include #include using namespace std;struct node{ int num; node *next[26];};node *head;char str[50005][55];void init(node *h){ for(int i=0;i<26;i++) h->next[i]=NULL; h->num=0;}void h_insert(char s[]){ node *t,*s1=head; int n=strlen(s); for(int i=0;i next[k]==NULL) { t=new node; init(t); s1->next[k]=t; } s1=s1->next[k]; s1->num++; }}int h_search(char s[]){ int cnt; node *s1=head; int n=strlen(s); for(int i=0;i next[k]==NULL) return 0; s1=s1->next[k]; cnt=s1->num; } return cnt;}void del(node *h){ for(int i=0;i<26;i++) { if(h->next[i]) del(h->next[i]); } delete(h);}char temp[50005];int main(){ int i,j,k,len,shu=0; head=new node; init(head); while(scanf("%s",str[shu])!=EOF) { h_insert(str[shu]); shu++; } for(i=0;i