数组
void build(char *s)
{
int rt=0;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(!tree[rt][x])
tree[rt][x]=pos++;
rt=tree[rt][x];
}
vis[rt]=1;
}
bool find(char *s)
{
int rt=0;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(!tree[rt][x])
return 0;
rt=tree[rt][x];
}
if(vis[rt])
return 1;
else return 0;
}
指针
struct node
{
struct node *next;
bool vis;
node()
{
vis=0;
memset(next,0,sizeof(next));
}
}*rt;
void insert(char *s)
{
node *p=rt;
node *tmp=0;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(p->next[x]==0)
tmp=new node,
p->next[x]=tmp;
p=p->next[x];
}
p->vis=1;
}
bool find(char *s)
{
node *p=rt;
for(int i=0;s[i];i++)
{
int x=s[i]-'a';
if(p->next[x]==0)
return 0;
p=p->next[x];
}
if(p->vis==1)
return 1;
else
return 0;
}