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;

}

  

你可能感兴趣的:(HDU)