算法--Trie

Trie

  • 概念
    • Trie树
    • Trie树
      • 经典题

算法基础系列


概念

Trie树

概念:高效存储查找字符串集合的数据结构

建树思想:建一个根,一串的存下去,单词结尾打上标记

Trie树

经典题

算法--Trie_第1张图片

代码

#include 

using namespace std;

const int N = 1e5 + 10;

int son[N][26]; //树 一个节点最多有26条边
int cnt[N];     //记录单词结尾的字母
int idx;        //当前插入的单词

char str[N]; //读入的字符串

void insert(char str[]) //插入操作
{
    int p = 0;
    for (int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a'; //把字母转换为对应数字
        if (!son[p][u])       //如果没有节点 创建节点
            son[p][u] = ++idx;
        p = son[p][u]; //记录当前字母
    }
    cnt[p]++; //结尾字母++
}

int query(char str[]) // 查询操作
{
    int p = 0;
    for (int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a';
        if (!son[p][u]) //如果没这个字母  即表示没这个单词
            return 0;
        p = son[p][u];
    }
    return cnt[p];
}

int main()
{
    int n;
    scanf("%d", &n);
    while (n--)
    {
        char op[2];
        scanf("%s%s", op, str);
        if(op[0] == 'I')
            insert(str);
        else
            printf("%d\n", query(str));
    }
    return 0;
}

你可能感兴趣的:(算法,算法,c++,图论)