首页 > 其他分享 >Trie 字典树

Trie 字典树

时间:2023-08-27 23:47:13浏览次数:35  
标签:Trie ++ son char int str 节点 字典

高效地存储和查找字符串集合的数据结构

  1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
  2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
  3. 每个节点的所有子节点包含的字符互不相同。

通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词

模板:

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e5 + 10;

int son[N][26], cnt[N], 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()
{
    
    return 0;
}

标签:Trie,++,son,char,int,str,节点,字典
From: https://www.cnblogs.com/-37-/p/17661124.html

相关文章

  • oracle学习笔记(12)——数据库服务器工作模式与数据字典
    1、 专用服务器工作模式    1)概念:       专用服务器模式是指Oracle为每个用户进程启动一个专门的服务器进程,该服务器进程仅为该用户进程提供服务,直到用户进程断开连接时,对应的服务器进程才终止。    2)特点:       服务器进程与客户进......
  • 可持久化字典树
    例题传送门:异或运算还不错的题既然要异或运算,我们可以想到按位枚举,用字典树去存。既然要找第\(k\)大,我们可以想到主席树。所以这题就是:可持久化字典树考虑到这题\(n,p\)较小,可以直接枚举,而\(m\)较大,我们可以用可持久化字典树去存\(y_i\),查询的时候就模拟字典树的查询,......
  • easypoi导入导出字段字典码值自动转换
    1.replace进行内容替换@Excel(name="是否有效",width=30,replace={"是_1","否_0","_null"})privateStringisEffective;Excel文件内'是否有效'这列的数据将会根据replace规则替换,例如'是'会被替换为'1',空白会被替换为null。反过来导出数据到E......
  • 字典树学习笔记
    字典树字典树(Trie)简介又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比......
  • Go语言字典(map)的使用
    目录3.字典(map)的使用3.1字典的初始化方式1:3.2字典的初始化方式2:3.3字典的初始化方式3:3.4字典的遍历1:3.5字典的遍历2:3.6判断字典中有无某个key3.7删除字典中的某个键值对3.字典(map)的使用3.1字典的初始化方式1:packagemainimport"fmt"funcmain(){ varscoreM......
  • 定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的
    知识点:zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。li=[3,4,5]t=(7,8,9)print(list(zip(li,t)))print(dict(zip(li,t)))运行截图:例1:deff(a,b):print(a)print(b)#先获取对应的元素b......
  • swift学习笔记之---数组、字典、枚举、结构体
    1、数组-Arraylettypes=["none","warning","error"]//省略类型的数组声明letmenbers=[String]()//声明一个空数组menbers.append("six")//添加元素menbers+=["seven"]//添加元素menbers.insert("one"......
  • Python基础入门学习笔记 025 字典:当索引不好用时
    映射 创建和访问字典>>>dict4=dict(小甲鱼='让编程改变世界',李宁='一切皆有可能')>>>dict4{'小甲鱼':'让编程改变世界','李宁':'一切皆有可能'}>>>dict4['爱迪生']='天才是99%的汗水加1%的灵感'>>&g......
  • 字典树(前缀树)求区间异或和(异或对)最大值
    字典树(前缀树)求区间异或和(异或对)最大值求子区间异或对最大值求子区间异或对的最大值,利用前缀树可以在每次询问对子区间内的每个元素在O(logn)的时间内得到答案,执行n此的时间花费为O(nlogn),而得到答案需要已经建立前缀树,而每次询问答案都需要重新建立一棵前缀树,每次建树最坏情......
  • Python列表、元组、字典、集合、字符串
    一、代码例题1、阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64......