【字典树/trie树】实现高效插入和查询字符串的数据结构

这篇具有很好参考价值的文章主要介绍了【字典树/trie树】实现高效插入和查询字符串的数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文是https://www.acwing.com/problem/content/description/837/的总结,有兴趣可以做做

  字典树的实现依赖于树结构,有两种操作,1是插入字符串,2是查找字符串。使用idx维护最新的结点下标。如下图,假设我们维护一个

【字典树/trie树】实现高效插入和查询字符串的数据结构

   可以看到,我们维护了一个树形结构储存了左边的字符串,但是我们不止建立这样的树,还得标记每个字符串的结尾

【字典树/trie树】实现高效插入和查询字符串的数据结构

   这样,当我们多次插入像ab这样的字符串的时候就可以记录下插入的总数。我们将每个结点都标记一个编号,根结点标记为0,起全局变量idx实现。具体代码实现如下:

 1 #include<bits/stdc++.h>
 2 #define int long long
 3 using namespace std;
 4 const int INF = 1e18 + 10,maxn = 1e5 + 10;
 5 
 6 int n;
 7 int son[maxn][26],idx,cnt[maxn];
 8 
 9 void insert(char str[]){
10     int p = 0;
11     for(int i = 0; str[i] ; i++){
12         int id = str[i] - 'a';
13         if(!son[p][id]) son[p][id] = ++idx;
14         p = son[p][id];
15     }
16     cnt[p]++;
17 }
18 
19 int quary(char str[]){
20     int p = 0;
21     for(int i = 0; str[i]; i++){
22         int id = str[i] - 'a';
23         if(!son[p][id]) return 0;
24         p = son[p][id];
25     }
26     return cnt[p];
27 }
28 signed main (){
29     ios::sync_with_stdio(false);
30     cin.tie(0),cout.tie(0);
31     
32     cin>>n;
33     char str[maxn];
34     for(int i = 1; i <= n; i++){
35         char op;
36         cin>>op;
37         cin>>str;
38         if(op == 'I'){
39             insert(str);
40         }else if(op == 'Q'){
41             cout << quary(str) << '\n';
42         }
43     }
44     
45     return 0;
46 }

  在这里解释以下数据结构作用文章来源地址https://www.toymoban.com/news/detail-778143.html

  son[i][id]//表示结点i的儿子id是否存在。(还记得吗,我们使用idx给每个结点编号)
  idx//当更新结点时++idx,赋予新建立的结点独一无二的编号。
  cnt[i]//表示以结点i结尾的字符串的数量,相当于上图中给每个字符串结尾标记。

到了这里,关于【字典树/trie树】实现高效插入和查询字符串的数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • python字符串转换成字典

    1、使用eval()函数将字符串转换为字典: string = ‘{“name”: “Alice”, “age”: 25}’ dictionary = eval(string) 2、使用json模块的loads()函数将字符串转换为字典: import json string = ‘{“name”: “Alice”, “age”: 25}’ dictionary = json.loads(string) 3、使用字符串的split()函数将字符串按照指定的分

    2024年03月15日
    浏览(17)
  • java 字符串中插入字符串

    一、使用 StringBuilder 进行字符串处理,效率最高 输出: aaaa123abbbbcccc 效率比较高,整个过程只会产生2个对象 二、直接对字符串进行处理 此方法效率比较低,整个过程会产生4个对象 三、直接对字符串进行处理 将字符串转成数组,然后对数组进行处理,不推荐,这里就不展

    2024年02月16日
    浏览(6)
  • 飞天使-python的字符串转义字符元组字典等

    飞天使-python的字符串转义字符元组字典等

    基础语法 数据类型 python的字符串 运算符 输入和输出 数据结构 列表与元组 元组的操作 字典与集合 参考文档

    2024年02月10日
    浏览(13)
  • Python数据容器——列表、元组、字符串、集合、字典

    Python数据容器——列表、元组、字符串、集合、字典

    作者: Insist-- 个人主页: insist--个人主页 本文专栏:Python专栏 专栏介绍: 本专栏为 免费 专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、了解数据容器 1. 为什么需要数据容器? 2. 数据容器是什么? 二、数据容器—列表(list) 1. 列表的定义 2. 列表的

    2024年02月08日
    浏览(23)
  • 将字符串转化为字典 - Python 编程指南

    在Python编程中,有时我们需要将一个字符串转换为字典。这种情况可能发生在从外部源(如文件、网络等)读取数据时,数据以字符串的形式提供,但我们需要将其转换为字典以便于处理和操作。本文将向您展示如何在Python中将字符串转换为字典,并提供相应的源代码示例。

    2024年02月04日
    浏览(7)
  • Python中将字典转换为字符串常用的方法!

    在Python中,字典是一种很常见的数据类型,其由一组键值对组成的无序集合,有时候需要将字典转换为字符串,以便于在网络传输、文件存储等场合使用。那么如何将字典转换为字符串格式呢?以下是详细的内容: 1、使用json库 json是一种轻量级的数据交换格式,它可以将Pyt

    2024年02月08日
    浏览(10)
  • Python——第3章 列表、元组、字典、集合与字符串

    append()、insert()、extend() pop()、remove() count()、index() sort()、reverse() 切片是用来获取列表、元组、字符串等有序序列中部分元素的一种语法。在形式上,切片使用2个冒号分隔的3个数字来完成。 [start🔚step] 其中第一个数字start表示切片开始位置,默认为0;第二个数字end表示切片

    2024年02月07日
    浏览(13)
  • 2734. 执行子串操作后的字典序最小字符串

    给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为: 选则 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,\\\'b\\\' 用 \\\'a\\\' 替换,\\\'a\\\' 用 \\\'z\\\' 替换。 返回执行上述操作 恰好一次 后可以

    2024年02月09日
    浏览(10)
  • 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本

    动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本

    动态规划汇总 多源最短路径 字典树 视频算法专题 给你两个下标从 0 开始的字符串 source 和 target ,它们的长度均为 n 并且由 小写 英文字母组成。 另给你两个下标从 0 开始的字符串数组 original 和 changed ,以及一个整数数组 cost ,其中 cost[i] 代表将字符串 original[i] 更改为字符

    2024年02月04日
    浏览(14)
  • 2645. 构造有效字符串的最少插入数

    给你一个字符串  word  ,你可以向其中任何位置插入 \\\"a\\\"、\\\"b\\\" 或 \\\"c\\\" 任意次,返回使  word   有效  需要插入的最少字母数。 如果字符串可以由 \\\"abc\\\" 串联多次得到,则认为该字符串  有效  。 示例 1: 示例 2: 示例 3: 提示: 1 = word.length = 50 word  仅由字母 \\\"a\\\"、\\\"b\\\" 和 \\\"c\\\" 组成

    2024年01月20日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包