好像静态的比动态的好,无聊,写了个静态的。
#include <stdio.h>
#include <string.h>
#define CLR(a,v) memset(a,v,sizeof(a))
#define MAX 1000010
struct Trie
{
bool in;
Trie* next[26]; //可变
}Node[MAX];
int top;
inline Trie* newnode()
{
Node[top].in = false;
CLR(Node[top].next,false);
return &Node[top++];
}
void Init()
{
top = 0;
newnode();
}
void Insert(char* str) //可改为bool,即边插入边判断
{
Trie* u = &Node[0];
for(int i=0; str[i] ;i++)
{
int num = str[i]-'a'; //可改为-'0'或其他
if(u->next[num] == NULL)
u->next[num] = newnode();
u = u->next[num];
}
u->in = true;
}
bool Find(char* str)
{
Trie* u = &Node[0];
for(int i=0; str[i] ;i++)
{
int num = str[i]-'a'; //同上
if(u->next[num] == NULL)
return false;
u = u->next[num];
}
return u->in;
}