题目 :http://acm.hdu.edu.cn/showproblem.php?pid=1251
利用数组来创建字典树,感觉比指针的好理解
#include <iostream>
#include<cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn = 500001;
int tr[maxn][26], pass[maxn],ll;
char str[maxn];
void insert()
{
int i, j, k;
k=0;
for(i=0;str[i]!='\0';i++)
{
if(tr[k][str[i]-'a']==-1)
{
tr[k][str[i]-'a']=ll;
pass[ll]=0;
ll++;
}
k=tr[k][str[i]-'a'];
pass[k]++;
// printf("%d %d %d\n",k, pass[k], ll);
}
}
int main()
{
int i, j, k, sum;
ll=1;
memset(tr, -1, sizeof(tr));
while(gets(str), str[0]>0)
insert();
while(scanf("%s",str)!=EOF)
{
int len = strlen(str);
k=0;
for(i=0;i<len;i++)
{
if(tr[k][str[i]-'a']==-1){
printf("0\n");
break;
}
k=tr[k][str[i]-'a'];
if(i==len-1)
{
printf("%d\n",pass[k]);
break;
}
}
}
return 0;
}