Trie字符串统计
废话不多说,上图。
按着上表逻辑来做
idx既是根节点,又是下标
const int N=100010;
char str[N];
int son[N][26],cut[N],idx;
插入数据,如果没有这个数据的话就建立一个
void charu(char str[])
{
int p=0;
for(int i=0;str[i];i++)
{
int u=str[i]-'a';
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
cut[p]++;//结尾标记整个单词结束
}
if(!son[p][u]) son[p][u]= ++dix 的意思是这个子节点没有的话,那么就建立一个
str因为是字符串结尾有’/0’,所以可以直接写成str[i],当然你也可以写成str.size()
查找的话就简单了,和上面插入同理
int chazhao(char 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];
}