Trie

发布时间 2023-12-09 13:57:45作者: 会有续命晴空

\(N\)为所有字符串的最大长度和,\(M\)为字符集大小,\(idx\)用于分配节点编号。

\(n\)为字符串长度,\(t[k][u]\)表示节点\(k\)且出边为\(u\)的另一侧节点编号。

\(insert\):插入字符串,时间复杂度\(O(n)\)

\(visit\):遍历字符串,遍历方式和内容无定式,按需遍历。

struct Trie
{
    int t[N][M], idx;
    void insert(const string &s)
    {
        int k = 0;
        for (auto i : s)
        {
            int u = i - 'a';
            if (!t[k][u]) t[k][u] = ++idx;
            k = t[k][u];
        }
    }
    void visit(const string &s)
    {
        int k = 0;
        for (auto i : s)
        {
            int u = i - 'a';
            if (!t[k][u]) break;
            k = t[k][u];
        }
    }
};