hdu1251

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct tree{
	int lev;
	struct tree*next[26];
};
tree root;
char str[12];

void creat_tree(char *str){
	int i,j,len,id;
	len=strlen(str);
	tree *p=&root,*temp;
	for(i=0;i<len;i++){
		id=str[i]-'a';
		if(p->next[id]==NULL){
			temp=(tree *)malloc(sizeof(root));
			temp->lev=1;
			for(j=0;j<26;j++)
				temp->next[j]=NULL;
			p->next[id]=temp;
			p=p->next[id];
		}
		else{
			(p->next[id])->lev++;//说明该前缀出现,+1
			p=p->next[id];
		}
	}
}

int search(char *str){
	int i,j,len,id;
	len=strlen(str);
	tree *p=&root,*temp;
	for(i=0;i<len;i++){
		id=str[i]-'a';
		p=p->next[id];
		if(p==NULL)
			return 0;
	}
	return p->lev;//返回前缀出现次数
}

int main(){
	int i,j,ans;
	for(i=0;i<26;i++)
		root.next[i]=NULL;
	while(gets(str)&&str[0]!='\0'){
		creat_tree(str);
	}
	while(scanf("%s",str)!=EOF){//not NULL
		ans=search(str);
		printf("%d\n",ans);
	}
	return 0;
}

  

posted @ 2012-08-03 13:19  xxx0624  阅读(297)  评论(0编辑  收藏  举报