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

字典树

 

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;

 

你可能感兴趣的:(字符串)