刚开始接触的新东西
参考文献http://www.cnblogs.com/dolphin0520/archive/2011/10/11/2207886.html
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#define MAX 26
using namespace std;
typedef struct TrieNode
{
bool isStr;
struct TrieNode *next[MAX];
} Trie;
void Insert(Trie * root,char *s)//插入
{
if(root==NULL || *s=='\0')
return ;
Trie *p=root;
while(*s!='\0')
{
if(p->next[*s-'a']==NULL)
{
Trie *temp=(Trie *)malloc(sizeof(Trie));
for(int i=0; i<MAX; i++)
temp->next[i]=NULL;
temp->isStr=false;
p->next[*s-'a']=temp;
p=p->next[*s-'a'];
}
else
p=p->next[*s-'a'];
s++;
}
p->isStr=true;
}
bool Search(Trie *root,char *s)//查找
{
Trie *p=root;
while(p!=NULL&&*s!='\0')
{
p=p->next[*s-'a'];
s++;
}
if(p!=NULL && p->isStr)
return true;
return false;
}
void del(Trie *root)//释放内存
{
if(root==NULL)
return ;
for(int i=0;i<MAX;i++)
if(root->next[i]!=NULL)
del(root->next[i]);
free(root);
}
int main()
{
char s[100];
Trie *root=(Trie *)malloc(sizeof(Trie));
for(int i=0; i<MAX; i++)
root->next[i]=NULL;
root->isStr=false;
int n,k;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
{
scanf("%s",s);
Insert(root,s);
}
scanf("%d",&k);
while(k--)
{
scanf("%s",s);
if(Search(root,s))
printf("YES\n");
else
printf("NO\n");
}
free(root);
}
return 0;
}