您的位置:首页 > 其它

【字符串匹配】字典树模板

2014-12-06 10:26 183 查看
字典树

tree.insert(s,v); 插入字符串s,其中v为字符串的序号(从1开始)。

tree.exist(s); 检测字符串s是否存在。

struct Trie
{
int ch[1000005][26];
int val[1000005];
int size;
Trie()
{
size=1;
memset(ch[0],0,sizeof(ch[0]));
}

int idx(char c)
{
return c-'a';
}

void insert(char *s,int v)
{
int u=0,len=strlen(s);
for (int i=0;i<len;i++)
{
int c=idx(s[i]);
if (!ch[u][c])
{
memset(ch[size],0,sizeof(ch[size]));
val[size]=0;
ch[u][c]=size++;
}
u=ch[u][c];
}
val[u]=v;
}

bool exist(char *s)
{
int u=0,len=strlen(s);
for (int i=0;i<len;i++)
{
int c=idx(s[i]);
if (!ch[u][c])
{
return false;
}
u=ch[u][c];
}
if (val[u]) return true;
else return false;
}
} tree;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: