Trie树模板

来源:互联网 发布:姚明生涯得分数据统计 编辑:程序博客网 时间:2024/06/06 05:25

最近在扩充知识量,疯狂学习模板

贴一个trie树模板,里边26可改动,这里仅针对小写字母

#include <bits/stdc++.h>using namespace std;typedef struct Trie{    int v;    Trie *next[26];} Trie;Trie root;void createTrie(char *str){    int len = strlen(str);    Trie *p = &root, *q;    for(int i=0; i<len; ++i)    {        int id = str[i]-'a';        if(p->next[id] == NULL)        {            q = (Trie *)malloc(sizeof(root));            q->v = 1;            for(int j=0; j<26; ++j)                q->next[j] = NULL;            p->next[id] = q;            p = p->next[id];        }        else        {            p->next[id]->v++;            p = p->next[id];        }    }}int findTrie(char *str){    int len = strlen(str);    Trie *p = &root;    for(int i=0; i<len; ++i)    {        int id = str[i]-'a';        p = p->next[id];        if(p == NULL)            return 0;    }    return p->v;}int main(){    //freopen("1.txt", "r", stdin);    char str[30];    int i,n;    for(i=0; i<26; ++i)        root.next[i] = NULL;    scanf("%d", &n);    for(i=0; i<n; i++)    {        scanf("%s", str);        createTrie(str);    }    memset(str, 0, sizeof(str));    scanf("%d", &n);    for(int i=0; i<n; i++)    {        scanf("%s", str);        int ans = findTrie(str);        printf("%d\n", ans);    }    return 0;}


0 0