当前位置: 首页 > news >正文

trie算法

1、定义

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

它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高

2、构建

我们可以使用数组来模拟实现Trie树。

我们设计一个二维数组 son[N] [26] 来模拟整个树的结构,而cnt[N] 来记录单词个数。

举个例子: son[1][1]=2 代表的是 1号节点 的一个值为b的节点 是 2号节点。而son[1][0]=0 则表示1号节点不存在 值为 a 的节点。

在这里插入图片描述

在这里插入图片描述

3、代码分析

1、定义

son[N][26]

下标是x的点

x这个节点的所有的儿子是去存储到son[x][26]里面

son[x][0]就是第一个节点 son[x][1]就是第二个节点

cont[x]表示以x为结尾的单词有多少个

int son[N][26], cnt[N], idx;
// 0号点既是根节点,又是空节点
// son[][]存储树中每个节点的子节点
// cnt[]存储以每个节点结尾的单词数量
2、插入操作
// 插入一个字符串
void insert(char *str)
{int p = 0;//从根节点开始,从前往后遍历for (int i = 0; str[i]; i ++ ){//将a-z 映射成  0 - 25int u = str[i] - 'a';//如果当前节点不存在 => p节点不存在u这个儿子//就创建出来if (!son[p][u]) son[p][u] = ++ idx;//将该值赋给pp = son[p][u];}//以该点为结尾的数字多了一个cnt[p] ++ ;
}
3、查询操作
// 查询字符串出现的次数
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];}//返回以p结尾的单词的数量return cnt[p];
}

3.题目

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

1、 I x向集合中插入一个字符串 x;
2、 Q x询问一个字符串在集合中出现了多少次。
共有 N个操作,所有输入的字符串总长度不超过10^5 ,字符串仅包含小写英文字母。

输入格式

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

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

输出格式

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

每个结果占一行。

数据范围

1≤N≤2∗10^4

输入样例:

5
I abc
Q abc
Q ab
I ab
Q ab

输出样例:

1
0
1

#include <iostream>using namespace std;const int N = 100010;int son[N][26],idx,cnt[N];
char str[N];//向集合中插入一个字符串 x
void insert(char str[])
{int p = 0;for (int i = 0; str[i]; i++){int u = str[i] - 'a';//将这个字符从a-z变成 0-25if (!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;cin >> n;while (n--){char op[2];cin >> op >> str;if (op[0] == 'I') insert(str);else cout << query(str)<< endl;}return 0;
}

相关文章:

trie算法

1、定义 高效的存储和查找字符串集合的数据结构 它的优点是&#xff1a;利用字符串的公共前缀来减少查询时间&#xff0c;最大限度地减少无谓的字符串比较&#xff0c;查询效率比哈希树高 2、构建 我们可以使用数组来模拟实现Trie树。 我们设计一个二维数组 son[N] [26] 来…...

Kubernetes之pod的基本概念

目录 什么是pod 启动一个pod 说明 Pod 和控制器 Pod 模板 Pod 更新与替换 资源共享和通信 Pod 中的存储 Pod 联网 Pod 安全设置 什么是pod Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 Pod&#xff08;就像豌豆荚中&#xff09;是一组&#…...

PostgreSQL的学习心得和知识总结(一百五十)|[performance]更好地处理冗余 IS [NOT] NULL 限定符

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

sqllabs游戏

文章目录 总体思路&#xff1a;less-1:less-2:less-3:less-4:less-5:less-6:less-7:less-8:布尔盲注less-9:时间盲注less-21:less-24: 总体思路&#xff1a; 1、第一件事情 逃脱出单引号的控制 闭合单引号 2、单双引号需要成对出现 在python php Java中 3、2个办法 继续把多出…...

React Native Firebase:移动应用后端集成

React Native Firebase 是一个强大的库&#xff0c;它允许你在 React Native 应用中集成 Firebase 后端服务。Firebase 提供了一系列的服务&#xff0c;包括实时数据库、身份验证、云存储、云消息推送等&#xff0c;这些服务可以帮助你构建功能丰富、可扩展的移动应用。 安装和…...

趣味算法------开灯问题

题目描述 有 n 盏灯&#xff0c;编号为 1~n&#xff0c;第 1 个人把所有灯打开&#xff0c;第 2 个人按下所有编号为 2 的倍数的开关&#xff08;这些灯将被关掉&#xff09;&#xff0c;第 3 个人按下所有编号为 3 的倍数的开关&#xff08;其中关掉的灯将被打开&#xff0c;…...

如何长生?重要的是对内求索!

文章目录 1. 世界上没有仙丹2. 长生只能对内求索 1. 世界上没有仙丹 小说中的九转大还丹&#xff0c;修仙中的仙丹&#xff0c;蟠桃是不存在的。这是理所当然的废话。但是世界上总有很多广告词&#xff0c;用老山参、野生、纯天然&#xff0c;补肾、补肝等词来形容自己的产品&…...

SD-WAN解决方案

联通国际公司企业SD-WAN解决方案 产品介绍 随着数字化转型的加速推进&#xff0c;企业对网络连接的需求也在不断提高。联通国际公司推出的SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;解决方案&#xff0c;旨在为企业提供更…...

什么是C++的引用,请举例说明

C中的引用&#xff08;Reference&#xff09;是C语言的一个特性&#xff0c;它允许一个变量&#xff08;称为引用变量&#xff09;成为另一个变量&#xff08;被引用的变量&#xff09;的别名。这意味着&#xff0c;对引用变量的任何操作都会直接反映在被引用的变量上&#xff…...

大数据_SQL_5min访问达到100次的用户

某公司网站每日访问量达到10亿级别的访问量&#xff0c; 每次访问记录一条数据&#xff0c;数据包含如下字段&#xff1a;用户ID&#xff0c;访问时间&#xff08;毫秒级&#xff09;&#xff0c;访问页面。 要求使用hive求出所有在5分钟内访问次数达到100次的用户&#xff08;…...

Python PDF文本处理技巧 - 查找和高亮文字

目录 使用工具 Python在PDF中查找和高亮文字并统计出现次数和页码 Python在PDF的特定页面区域中查找和高亮文字 Python使用正则表达式在PDF中查找和高亮文字 Python在PDF中查找文字并获取它的坐标位置 其他查找条件设置 在日常工作和学习中&#xff0c;我们常常需要处理各…...

虚幻引擎 C++ 实现平面阴影

1、平面阴影介绍 平面阴影是一种相对简单的渲染阴影的方式&#xff0c;可以理解为对一个模型渲染两次&#xff0c;一次是渲染模型本身&#xff0c;另一次是渲染模型的投影。渲染投影可以看作是将模型的顶点变换到地面的投影空间再渲染&#xff0c;可以理解为渲染了一个“压扁”…...

leetcode 67. 二进制求和

二进制求和 已解答 简单 相关标签 相关企业 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&…...

【C++ 面试 - 基础题】每日 3 题(一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…...

【动态规划】1、不同路径II+2、三角形最小路径和

1、不同路径II&#xff08;难度中等&#xff09; 该题对应力扣网址 AC代码 只会写简单的if-else class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//1、定义子问题//2、子问题递推关系//3、确定dp数组的计算顺序…...

JavaEE-多线程编程单例模式

一、等待通知 系统内部&#xff0c;线程之间是抢占式执行的&#xff0c;随即调度&#xff0c;程序可以通过手动干预的方式&#xff0c;能够让线程一定程度的按咱们想要的顺序执行&#xff0c;无法主动让某个线程被调度&#xff0c;但可以主动让某个线程等待。等待通知可以安排…...

RHCA III之路---EX436-6

RHCA III之路---EX436-6 1. 题目2. 解题3. 确认 1. 题目 2. 解题 三台node分别运行 yum install -y device-mapper-multipath mpathconf --enable systemctl enable --now multipathd3. 确认 fdisk -l...

Vuex模块化 深入浅出超详细

Vuex 模块化 为什么需要模块化&#xff1f; 随着项目规模的增长&#xff0c;单一的 store 文件会变得庞大且难以管理&#xff1b; Vuex 的模块化是一种组织和管理应用状态的策略&#xff1a;&#xff0c;它允许将全局的状态管理分解成更小、更可管理的部分&#xff1b; 逻辑清…...

细说MCU检测按键输入的外部中断和修改HAL_GPIO_EXTI_IRQHandler() 的实现方法

目录 一、 硬件板及设计目的 二、建立工程 1.配置GPIO 2.配置时钟源和Debug 3.配置系统时钟 4.配置NVIC 三、代码编写 四、修改HAL_GPIO_EXTI_IRQHandler() 一、 硬件板及设计目的 本文使用的硬件板是ST的开发板NUCLEO-G474RE&#xff0c;板上MCU型号为ST…...

昂科烧录器支持XHSC小华半导体的32位微控制器HC32F005C6P

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中XHSC小华半导体的32位微控制器HC32F005C6P已经被昂科的通用烧录平台AP8000所支持。 HC32F005C6P是Low Pin Count、宽电压工作范围的MCU&#xff0c;集成12位1Msps高精度SARADC…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...