Tire树-存储与查找

news2024/11/15 5:46:53

 

#include <iostream>

using namespace std;

const int N = 100010;  // 定义常量 N 表示字典树节点的最大数量

int son[N][26], cnt[N], idx;  // son数组存储字典树,cnt数组记录某个字符串结束时的节点个数,idx表示当前字典树的节点总数
char str[N];  // 存储输入的字符串

// 插入字符串到字典树
void insert(char str[])
{
    int p = 0;  // p 指向当前节点,初始化为根节点(下标0)
    for (int i = 0; str[i]; i++)  // 遍历字符串中的每个字符
    {
        int u = str[i] - 'a';  // 计算当前字符对应的字母索引值(0-25)
        if (!son[p][u])  // 如果当前字符对应的子节点不存在
            son[p][u] = ++idx;  // 创建新的节点,并将当前节点的子节点指向新节点
        p = son[p][u];  // 移动到子节点,继续处理下一个字符
    }
    cnt[p]++;  // 当前字符串插入结束,将对应节点的计数加1
}

// 查询字符串在字典树中出现的次数
int query(char str[])
{
    int p = 0;  // p 指向当前节点,初始化为根节点(下标0)
    for (int i = 0; str[i]; i++)  // 遍历字符串中的每个字符
    {
        int u = str[i] - 'a';  // 计算当前字符对应的字母索引值(0-25)
        if (!son[p][u])  // 如果当前字符对应的子节点不存在
            return 0;  // 说明该字符串不存在于字典树中,返回0
        p = son[p][u];  // 移动到子节点,继续处理下一个字符
    }
    return cnt[p];  // 查询结束,返回字符串对应节点的计数,即字符串在字典树中出现的次数
}

int main()
{
    int n;
    cin >> n;  // 输入操作的次数
    while (n--)
    {
        char os;  // 操作类型
        cin >> os >> str;  // 输入操作类型和字符串
        if (os == 'I')  // 如果操作类型是插入
            insert(str);  // 调用插入函数将字符串插入字典树
        else  // 如果操作类型是查询
            cout << query(str) << endl;  // 调用查询函数并输出字符串出现的次数
    }
    
    return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之----堆

一、介绍 堆是一棵完全二叉树。堆又分为大堆&#xff0c;小堆两种结构。 大堆&#xff1a;所有的父节点都比它的子节点要大。 小堆&#xff1a;所有的父节点都比它的子节点要小。 二、堆的向上调整算法 比如要建一个小堆 思路&#xff1a;将父节点和子节点比较&#xff0c…

驰骋BPM RunSQL_Init SQL注入漏洞复现

0x01 产品简介 驰骋BPM系统由济南驰骋信息技术有限公司研发,具有悠久的历史和丰富的行业经验。其工作流引擎CCFlow自2003年开始研发,是国内知名的老牌工作流引擎,在BPM领域拥有广泛的研究群体与应用客户群。统提供.net与java两个版本,且两个版本的代码结构、数据库结构、设…

手写数字识别实战

全部代码&#xff1a; import matplotlib.pyplot import torch from torch import nn # nn是完成神经网络相关的一些工作 from torch.nn import functional as F # functional是常用的一些函数 from torch import optim # 优化的工具包import torchvision from matplotlib …

简单回归问题实战

数据表&#xff1a;链接: https://pan.baidu.com/s/1sSz7F_yf_JeumXcP4EjE5g?pwd753f 提取码: 753f 核心流程&#xff1a; import numpy as np # 计算误差函数 points是数据集中数据的位置 def compute_error_for_line_given_points(b,w,points):totalError0for i in range(0…

【FreeRTOS】队列的本质

目录 0 前言1. 数据传输的方法1.1 任务之间如何传输数据1.2 队列的本质1.3 操作队列的三个步骤 2 队列2.1 举例说明2.2 唤醒流程2.2.1 情况12.2.2 情况2 3 总结 0 前言 学习视频&#xff1a; 【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS&#xff08;FreeRTOS教程 基…

Haproxy基于cookie的会话保持

cookie value&#xff1a;为当前server指定cookie值&#xff0c;实现基于cookie的会话黏性&#xff0c;相对于基于 source 地址hash 调度算法对客户端的粒度更精准&#xff0c;但同时也加大了haproxy负载&#xff0c;目前此模式使用较少&#xff0c; 已经被session 共享服务器代…

亚信安慧AntDB-M聚合下推—加速你的数据分析查询

摘 要 在业务系统中&#xff0c;一般的事务型SQL语句涉及到的数据记录数不会很多&#xff0c;即便涉及到多个数据节点&#xff0c;基于AntDB-M的优化&#xff0c;访问也都很快。但是统计分析型SQL语句往往涉及到大量数据&#xff0c;甚至包括全表数据&#xff0c;基本都会覆盖…

3D 技术对我们的生活有哪些影响?

3D技术&#xff0c;也称为三维技术&#xff0c;是指利用计算机生成或处理三维数据的技术。它在多个领域对我们的生活产生了深远的影响&#xff1a; 1、制造业&#xff1a;3D技术使得个性化和定制化生产成为可能&#xff0c;大幅缩短了产品从设计到制造的时间&#xff0c;降低了…

【人工智能】Transformers之Pipeline(十):视频分类(video-classification)

目录 一、引言 二、视频分类&#xff08;video-classification&#xff09; 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipeline&#x…

网络编程 8/15 基于UDP多人聊天室

//客户端代码 #include <myhead.h> struct msgType {char type; // 消息类型L:登录&#xff0c;Q:退出&#xff0c;C:聊天char usrName[20];char msgText[1024]; }; #define SER_PORT 6666 // 服务器端口 #define SER_IP "192.168.2.161" // 服务器IP…

SpringBoot解决创建项目无法选择JDK8和JDK11

文章目录 解决方案1解决方案2 在创建SpringBoot项目的时候&#xff0c;我们发现只能勾选JDK17以上的。并且官方没有提供2.X版本&#xff0c;但是目前大多数企业使用的还是 springboot 初始化的网址&#xff0c;我们一般使用的是官方的网址。 解决方案1 就选择jdk17和spring…

BIM+GIS在管廊机电监控与运维管控系统中的应用

研究背景 根据《GB50838-2015城市综合管廊工程技术规范》及《GBT51274-2017城镇综合管廊监控与报警系统工程技术标准》的相关条款要求&#xff0c;城市综合管廊监控报警系统用于对综合管廊内的设备运行状态及参数、实时环境信息、出入口状态等进行全方位在线监控&#xff0c;保…

java基础概念17-static

一、 static的作用 static修饰的变量、方法被类的所有实例共享。 示例&#xff1a; static用于声明属于类本身的变量、方法&#xff0c;而不是类的某个特定对象的。 二、static内存图 静态区中的成员变量&#xff0c;对象共享&#xff0c;内存中只有一份&#xff0c;谁要用&am…

u2net 和u2netp 的具体区别

U2Net和U2NetP是两种基于深度学习的图像分割模型&#xff0c;它们都使用了编码器-解码器架构和跳跃连接来提高分割的精度。然而&#xff0c;它们在网络结构和参数配置上存在一些差异。 初始化阶段的中间通道数 (mid_ch): U2Net: self.stage1 RSU7(in_ch, 32, 64)U2NetP: self.…

RHEL8 配置epel源

** RHEL8 配置epel源 ** 此次环境为最小化安装&#xff0c;版本信息如下&#xff1a;redhat8 一、安装epel源&#xff0c;执行如下命令&#xff1a; #yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 之后执行#yum repolis 此时我们…

山海关古城测试--房产房屋

1.树状图搜索房产 1.1实现思路 因为树状图搜索要显示在界面中&#xff0c;所以需要在html文件中进行添加树状结构 而树状结构怎么来的&#xff0c;所以需要在controller中新写一个方法来传输一个树状结构&#xff0c;让html直接访问它即可树状结构在framework->web->Zt…

ES主分片和副本分片

在 Elasticsearch 中&#xff0c;主分片的数量在创建索引时设置&#xff0c;并且不能在索引创建后更改。主分片的数量因索引而异&#xff0c;对于每个索引&#xff0c;可以根据实际需要进行调整。 主分片数量的设置 默认值&#xff1a; 在 Elasticsearch 中&#xff0c;默认的主…

C++入门基础(太干了,别噎住)

1.C了解&#xff08;可跳过&#xff09; 1.1 C发展历史 C的起源可以追溯到1979年&#xff0c;当时Bjarne Stroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务&am…

maven配置aspose镜像

问题 安装aspose一直失败&#xff0c;原因是aspose文件不在公共仓库中 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><version>21.11</version> </dependency>配置文件如下 <mirror&g…

苍穹外卖-知识点

搭建环境 前端 使用nginx&#xff08;文件路径带中文 会启动不成功&#xff09; 后端