使用二维数组或者结构体数组都可以,但是在计数的时候有一点点小区别
一、结构体数组
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
typedef long long ll;
using namespace std;
const int maxn = 500000;
typedef struct
{
int cnt;
int next[26];
}node;
int tot;
node T[maxn];
void insert(char *s)
{
int u =0;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(T[u].next[x]==0)
{
T[u].next[x]=++tot;
}
u=T[u].next[x];
T[u].cnt++;
}
}
int find(char *s)
{
int u = 0;
for(int i=0;s[i];i++)
{
int x = s[i]-'a';
if(T[u].next[x]==0)
return 0;
u=T[u].next[x];
}
return T[u].cnt;
}
int main()
{
char s[20];
memset(T,0,sizeof(T));
tot=0;
while(gets(s))
{
if(s[0]=='\0')
break;
insert(s);
}
while(scanf("%s",s)!=EOF