题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1251
题解:
字典树模版题
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f;
const int maxn = 26;
struct Tire
{
Tire *next[maxn];
int cnt;
Tire(){
cnt=0;
for(int i=0;i<maxn;i++)
next[i]=NULL;
}
// 初始化
}root;
char s[maxn];
void create(char *s)
{
int len=strlen(s);
Tire *p=&root;
for(int i=0;i<len;i++)
{
int pos=s[i]-'a';
if(p->next[pos]==NULL)
p->next[pos]=new Tire();
// 如果为空,那么就新建一个
p=p->next[pos];
p->cnt++;
}
}
int search(char *s)
{
int len=strlen(s);
Tire *p=&root;
for(int i=0;i<len;i++)
{
int pos=s[i]-'a';
if(p->next[pos]==NULL)
return 0;
p=p->next[pos];
}
return p->cnt;
}
int main()
{
char s[20];
while(gets(s))
{
if(s[0]==NULL)
break;
create(s);
}
while(gets(s))
{
printf("%d\n",search(s));
}
}