本蒟蒻因无法像其他大佬们一样,讲得那么清楚,在网上查了半天,发现了一个讲的又简单又清楚的博客
传送门:https://blog.csdn.net/qq_37550148/article/details/74315746
个人觉得自己的代码会好看一些
附上代码主体:
int trie[SIZE][30],tot=1;
void insert(char *str)
{
int l=strlen(str),p=1;
for(int k=0;k<l;k++)
{
int ch=str[k]-'a';
if(trie[p][ch]==0)trie[p][ch]=++tot;
p=trie[p][ch];
}
end[p]=true;
}
bool search(char *str)
{
int l=strlen(str),p=1;
for(int k=0;k<l;k++)
{
p=trie[p][str[k]-'a'];
if(p==0)return false;
}
return end[p];
}
在此给出一道模板题:codevs4189字典(题目就和算法一样,字典当然要用字典树做了!)
附上代码,纯模板哦:
#include<stdio.h>
#include<string.h>
int trie[2000010][30],tot=1;
void insert(char *str)
{
int l=strlen(str),p=1;
for(int k=0;k<l;k++)
{
int ch=str[k]-'a';
if(trie[p][ch]==0)trie[p][ch]=++tot;
p=trie[p][ch];
}
}
bool search(char *str)
{
int l=strlen(str),p=1;
for(int k=0;k<l;k++)
{
p=trie[p][str[k]-'a'];
if(p==0)return false;
}
return true;
}
int main()
{
int n,m;
char s[10];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s);
insert(s);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s",s);
if(search(s)==true)printf("YES\n");
else printf("NO\n");
}
return 0;
}