标签:
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 struct node 5 { 6 node *ne[26]; 7 int cnt; 8 }*head; 9 void insert(char *s) 10 { 11 node *p=head,*q; 12 for(int i=0;s[i];i++) 13 { 14 int id=s[i]-‘a‘; 15 if(p->ne[id]!=NULL) 16 { 17 p=p->ne[id]; 18 p->cnt++; 19 } 20 else 21 { 22 q=(node*)malloc(sizeof(node)); 23 for(int i=0;i<26;i++) 24 q->ne[i]=NULL; 25 q->cnt=1; 26 p->ne[id]=q; 27 p=p->ne[id]; 28 } 29 } 30 } 31 int Q(char *s)//查询有多少以该串为前缀的串的数量 32 { 33 node *p=head; 34 for(int i=0;s[i];i++) 35 { 36 int id=s[i]-‘a‘; 37 if(p->ne[id]!=NULL) 38 p=p->ne[id]; 39 else 40 return 0; 41 } 42 return p->cnt; 43 } 44 void clean(node *p)//释放空间 45 { 46 if(p==NULL) return ; 47 for(int i=0;i<26;i++) 48 { 49 if(p->ne[i]!=NULL) 50 clean(p->ne[i]); 51 } 52 free(p); 53 return ; 54 } 55 int main() 56 { 57 int n,m; 58 char s[11]; 59 while(scanf("%d",&n)!=EOF) 60 { 61 head=(node*)malloc(sizeof(node)); 62 for(int i=0;i<26;i++) 63 head->ne[i]=NULL; 64 while(n--) 65 { 66 scanf("%s",s); 67 insert(s); 68 } 69 scanf("%d",&m); 70 while(m--) 71 { 72 scanf("%s",s); 73 printf("%d\n",Q(s)); 74 } 75 clean(head); 76 } 77 return 0; 78 }
标签:
原文地址:http://www.cnblogs.com/L-King/p/5435215.html