功能 实现字符串快速检索
插入
void inset(string str)
{
int p=0;
for(int i=0;str[i];i++)
{
int u=str[i]-'a';
if(!son[p][u])
son[p][u]=++idx; //u 当前存的字母是什么
p=son[p][u]; //p父亲节点的编号 ,idx当前存的字母是占据的节点编号
} // son 下一个节点(字母)的位置
cut[p]++; // cnt 到第p个字母结束的字符串有几个
}
查询
int query(string str)
{
int p=0;
for(int i=0;str[i];i++)
{
int u=str[i]-'a';
if(!son[p][u])
return 0;
p=son[p][u];
}
return cut[p];
}


京公网安备 11010502036488号