数据结构——Trie

news2024/9/24 17:11:14

题目:

维护一个字符串集合,支持两种操作:

  1. I x 向集合中插入一个字符串 x𝑥;
  2. Q x 询问一个字符串在集合中出现了多少次。

共有 N𝑁 个操作,所有输入的字符串总长度不超过 10^5,字符串仅包含小写英文字母。

输入格式

第一行包含整数 N𝑁,表示操作数。

接下来 N𝑁 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。

输出格式

对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x𝑥 在集合中出现的次数。

每个结果占一行。

数据范围

1≤N≤2∗10^4

解题分析:

本题是Acwing上的一道模板题,Trie树又叫字典树,就是一个像字典一样的树,可以帮助我们快速查找一个字符串是否出现过。通常采用树的边来代表字母,从根节点到树中的某一个结点表示一个字符串,以下是一张OI Wiki的树图:

在图中,aa,aba,ba,caaa,cab,cba,cc均是字符串。我们通常会在每个字符串末尾打上一个标记,用于查询过程中判断到这个标记时,就可读取为一个字符串,从而达到“字典”的效果。

C++实现如下:

#include <iostream>

using namespace std;

const int N = 100010;

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()
{
    int m;
    cin >> m;

    while(m--)
    {
        char op[2];
        scanf("%s%s", op, str);

        if(*op == 'I') insert(str);
        else printf("%d\n", query(str));
    }

    return 0;
}

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

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

相关文章

使用Python绘制箱线图并分析数据

使用Python绘制箱线图并分析数据 在这篇博客中&#xff0c;我们将探讨如何使用Python中的pandas库和matplotlib库来绘制箱线图&#xff0c;并分析数据文件中的内容。箱线图是一种常用的图表类型&#xff0c;用于展示数据的分布情况及其统计特性&#xff0c;如中位数、四分位数…

【Linux】vim详解

1.什么是vi/vim? 简单来说&#xff0c;vi是老式的文本编辑器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具&#xff0c;就连 vim的官方网站&#xff08; http://www.vim.org&#xff09;自己也说vim是一…

【Perforce】QAC-分析时如何不应用某些规则

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决扫描项目时如何不应用某些规则进行分析。 2、 问题场景 对于一些建议性的MISRA规则&#xff0c;不想用于项目扫描&#xff0c;如何处理&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2…

STM32CubeIDE离线汉化教程

按照网上的方法下载好ZIP文件后 帮助->安装新软件-> 按顺序选择文件 点击完成&#xff0c;后等待右下脚的精度条到位即可

总结之企业微信(一)——创建外部群二维码,用户扫码入群

创建外部群 企微接口中没有直接通过服务端API接口创建外部群 可以通过jssdk创建外部群&#xff1a;引用jssdk调用会话接口wx.openEnterpriseChat https://work.weixin.qq.com/api/doc/90000/90136/90511 创建外部群二维码 需要通过企业微信的应用&#xff0c;并且配置客户联…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出为各种应用生成类似人类文本的出色能力。然而&#xff0c;LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

下载安装Microsoft DirectX SDK(June 2010)

官方下载网址如下&#xff1a; Microsoft DirectX SDK(June 2010)链接 下载后是一个.exe文件 在安装之前&#xff0c;需要先检查你的电脑中是否已经安装过&#xff08;如果你安装过VS&#xff0c;那么一定会有这两个文件&#xff09; Microsoft Visual C 2010 x86 Redistribu…

解决 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 时出现错误&#xff1a; NullReferenceException: Object reference not set to an instance of an object。 理论上是有个Object 是 Null&#xff0c;当我再次检查URDF后仍觉得路径没有写错。 于是我 把Mesh…

压缩感知2——算法模型

采集原理 其中Y就是压缩后的信号表示(M维)&#xff0c;Φ表示采集的测量矩阵&#xff0c;可以是一个随机矩阵&#xff0c;X代表原始的数字信号&#xff08;N维&#xff09;。 常见的测量矩阵——随机高斯矩阵 随机伯努利矩阵 稀疏随机矩阵等&#xff0c;矩阵需要满足与信号的稀…

SenseVoice - 阿里最新开源精准多语言语音识别与情感辨识模型 本地一键整合包下载

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM&#xff0c;该项目包含了两个核心模型&#xff1a;SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆 本地一键包下载地址&#xff1a; SenseVoice - 精准多语言语音识别与情感辨识模型 本地一键整合包下载 SenseVo…

Appium-移动端自动测试框架详解

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用Appium&#xff1f;如何搭建Appium工具环境?(超详细&#xff09;通过demo演示Appium的使用Appium如何实现移动端UI自…

基层医院、专科医院云HIS系统,支持电子病历四级,全套源码交付

云HIS系统采用B/S架构云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院的主要工作流程&#xff0c;能够与监管…

大模型常见的LoRA算法原理、实现和运用详解

文章目录 1. 前言2. 算法介绍2.1 微调2.2 核心思想 3. 几个关键问题3.1 LoRA如何应用在Transformer上3.2 LoRA的最佳秩r如何选择3.3 W W W和 Δ W \Delta W ΔW有什么关系 4. 源码5. 实际应用6. 总结7. 参考 1. 前言 本文是常用算法的快速浏览入门&#xff08;扫盲&#xff0…

升级iOS18有问题?学会这2招能解决90%iOS问题!

在 iOS 18beta发布后&#xff0c;有部分朋友升级后表示遇到了各种奇怪问题&#xff0c;比如升级卡在Apple Logo&#xff0c;黑屏&#xff0c;无限重启&#xff0c;卡在恢复模式&#xff0c;程序闪退&#xff0c;电池消耗过快&#xff0c;发烫等问题。 于是&#xff0c;小编决定…

HTML(27)——渐变

渐变是多个颜色逐渐变化的效果&#xff0c;一般用于设置盒子模型 线性渐变 属性&#xff1a;background-image : linear-gradient( 渐变方向 颜色1 终点位置, 颜色2 终点位置, ......&#xff09;&#xff1b; 取值: 渐变方向:可选 to 方位名词角度度数 终点位置:可选 百分…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针&#xff08;Biotin-Naringin&#xff09;是一种结合了生物素&#xff08;Biotin&#xff09;和柚皮苷&#xff08;Naringin&#xff09;特性的化合物&#xff0c;它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析&#xff1a; 一…

研华工控机 UNO-2473G WIN7专业版系统下安装网卡驱动异常

基本配置&#xff1a;UNO-2473G、Windows 7 Pro 64bit 常规型嵌入式工控机&#xff0c;搭配Intel Atom™ E3845/Celeron J1900 处理器 第四代Intel Atom/Celeron J1900处理器&#xff0c;最高可达1.91/2.0 GHz&#xff0c;4GB DDR3L存储4/2 x GbE, 3 x USB 2.01 x USB 3.0或4…

VOS历史话单的非法呼叫话单解决方案,IPSS模块安装到VOS服务器,可大幅度提高安全性!

由于VOS的普及性&#xff0c;不得不承认VOS确实是非常优秀的软交换&#xff0c;但是很多客户在使用过程中都会遇到各种安全问题&#xff0c;比如话费被盗用了&#xff0c;历史话单一堆的非法呼叫话单&#xff0c;严重的影响到了话务安全&#xff0c;并不是那点话费的事了&#…

留学Assignment写作如何正确选择topic?

留学Assignment在写作之前首先需要选好topic&#xff0c;一个好的topic能让你的Assignment写起来更加顺畅&#xff0c;俗话说“文好题一半”&#xff0c;好的创作主题&#xff0c;不但对于写作帮助颇大&#xff0c;对于Assignment总体也是加分不少的。 添加图片注释&#xff0c…

python-课程满意度计算(赛氪OJ)

[题目描述] 某个班主任对学生们学习的的课程做了一个满意度调查&#xff0c;一共在班级内抽取了 N 个同学&#xff0c;对本学期的 M 种课程进行满意度调查。他想知道&#xff0c;有多少门课是被所有调查到的同学都喜欢的。输入格式&#xff1a; 第一行输入两个整数 N , M 。 接…