插入和查找
void inser(char *s,int n)
{
int p=0;
for(int i=0;i<n;i++)
{
int k=s[i]-'a';
if(a[p].num[k]==0)
{
a[p].num[k]=++t;
}
p=a[p].num[k];
num[p]++;
}
}
int getn(char *s,int n)
{
int p=0;
for(int i=0;i<n;i++)
{
int k=s[i]-'a';
if(a[p].num[k])
{
p=a[p].num[k];
}
else return 0;
}
return num[p];
}
p是每一个节点的名字,唯一
#include<bits/stdc++.h>
using namespace std;
struct node
{
int num[30];
};
node *a=new node[10000000];
int num[1000000]={0};
int t=0;
void inser(char *s,int n)
{
int p=0;
for(int i=0;i<n;i++)
{
int k=s[i]-'a';
if(a[p].num[k]==0)
{
a[p].num[k]=++t;
}
p=a[p].num[k];
num[p]++;
}
}
int getn(char *s,int n)
{
int p=0;
for(int i=0;i<n;i++)
{
int k=s[i]-'a';
if(a[p].num[k])
{
p=a[p].num[k];
}
else return 0;
}
return num[p];
}
int main()
{
//freopen("C:\\Users\\Lenovo\\Desktop\\input.txt","r",stdin);
char s[90];
while (gets(s)&&s[0]!='\0')
{
//getchar();
inser(s,strlen(s));
}
while (gets(s))
{
//getchar();
printf("%d\n",getn(s,strlen(s)));
}
return 0;
}