(查找是否纯在前缀)
结构体 Trie
成员函数:
void init() 初始化
void insert(char*str) 插入字符串str
int query(int s) 从s开始查找是否纯在一个字符串是另一个字符串的前缀
//N 字符集大小 如果是数字为10,如果是字母为26,大小写为52
//AIM 字符集最小字符
struct Trie
{
struct node
{
bool flog; //标记单词结尾
int next[N];
void init()
{
for(int i=0;i<N;i++)
next[i]=-1;
flog=false;
}
};
node p[100005];
int top;
void init()
{
top=1;
p[0].init();
}
void insert(char *str) //插入字符串
{
int pp=0;
for(int i=0;str[i];i++)
{
if(p[pp].next[str[i]-AIM]==-1)
{
p[pp].next[str[i]-AIM]=top;
p[top].init();
top++;
}
pp=p[pp].next[str[i]-AIM];
}
p[pp].flog=true;
}
int query(int s) //查找
{
if(p[s].flog!=0)
{
for(int i=0;i<N;i++)
if(p[s].next[i]!=-1)
return false;
return true;
}
bool ans=true;
for(int i=0;i<N;i++)
{
if(p[s].next[i]!=-1)
ans=ans&&query(p[s].next[i]);
}
return ans;
}
}T;