试个指针实现的
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
node *next[26];
int val;
};
node *root;
int getid(char c) {return c-'a';}
void insert(char *s)
{
int len=(int)strlen(s);
node *pre=root,*next;
for(int i=0;i<len;i++)
{
int id=getid(s[i]);
next=pre->next[id];
if(!next)
{
next=(node*)malloc(sizeof(node));
memset(next,NULL,sizeof(node));
pre->next[id]=next;
}
next->val++;
pre=next;
}
}
int query(char *s)
{
int len=(int)strlen(s);
node *pre=root,*next;
for(int i=0;i<len;i++)
{
int id=getid(s[i]);
next=pre->next[id];
if(!next) return 0;
pre=next;
}
return pre->val;
}
char s[12];
int main()
{
root=(node*)malloc(sizeof(node));
memset(root,0,sizeof(node));
while(gets(s)&&strlen(s))
{
insert(s);
}
while(gets(s))
{
printf("%d\n",query(s));
}
return 0;
}