字典树的简单应用。
#include#include char str[10100][22];struct node{ int cnt; node *next[26];}*p;void build(char str[],int k,node *head){ while(k next[str[k]-'a']!=NULL) { head->next[str[k]-'a']->cnt+=1; head=head->next[str[k]-'a']; } else { head->next[str[k]-'a']=new node; head=head->next[str[k]-'a']; head->cnt=1; for(int i=0;i<26;i++) head->next[i]=NULL; } k++; }}void search(char str[],int k,node *head){ while(k next[str[k]-'a']!=NULL) { printf("%c",str[k]); if(head->next[str[k]-'a']->cnt==1) return ; } head=head->next[str[k]-'a']; k++; }}void del(node *head){ if(head==NULL) return ; for(int i=0;i<26;i++) { del(head->next[i]); head->next[i]=NULL; } delete(head);}int main(){ p=new node; for(int i=0;i<26;i++) p->next[i]=NULL; int cnt=0; while(~scanf("%s",str[cnt])) { build(str[cnt],0,p); cnt++; } for(int i=0;i