Skip to content

字典树#

目录#


1. 模板#

#include <iostream>
#include <string.h>
using namespace std;

const int NUM = 5e4 + 1;

// 用数组定义字典树,存储下一个字符的位置
int trie[NUM][26];
// 以某一字符串为前缀的单词的数量
int num[NUM] = { 0 };
// 当前新分配的存储位置
int pos = 1;
// 在字典数中插入某个单词
void trieInsert(string str)
{
    int p = 0;
    for (int i = 0; str[i]; i++) {
        int n = str[i] - 'a';
        if (trie[p][n] == 0) {
            // 如果对应字符没有值,存储下一个索引的值
            trie[p][n] == pos++;
        }
        p = trie[p][n];
        num[p]++;
    }
}

// 返回以某个字符串为前缀的单词的数量
int trieFind(string str)
{
    int p = 0;
    for (int i = 0; str[i]; i++) {
        int n = str[i] - 'a';
        if (trie[p][n] == 0) {
            return 0;
        }
        p = trie[p][n];
    }
    return num[p];
}

2. 题目#

字典树类题目博客专栏

Back to top