当前位置: 首页 > 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…...

BiliTools:5分钟学会高效管理你的B站学习资源

BiliTools&#xff1a;5分钟学会高效管理你的B站学习资源 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你是否曾经…...

nginx-proxy-automation升级与迁移指南:平滑过渡到新版本

nginx-proxy-automation升级与迁移指南&#xff1a;平滑过渡到新版本 【免费下载链接】nginx-proxy-automation Automated docker nginx proxy integrated with letsencrypt. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-automation nginx-proxy-automati…...

亚洲美女-造相Z-Turbo效果展示:超写实皮肤纹理、毛发细节与光影反射真实感

亚洲美女-造相Z-Turbo效果展示&#xff1a;超写实皮肤纹理、毛发细节与光影反射真实感 本文展示的AI生成内容仅为技术效果演示&#xff0c;所有生成的人物形象均为虚拟创作&#xff0c;不存在真实对应人物。 1. 惊艳效果预览&#xff1a;为什么这个模型值得关注 如果你正在寻找…...

3个关键优化:如何让Stable Diffusion模型在普通硬件上流畅运行?

3个关键优化&#xff1a;如何让Stable Diffusion模型在普通硬件上流畅运行&#xff1f; 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix 你是否曾经尝试运行Stable Diffusion模型&a…...

解锁3大核心能力:写给复古游戏爱好者的FBNeo实战指南

解锁3大核心能力&#xff1a;写给复古游戏爱好者的FBNeo实战指南 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo 在数字娱乐日新月异的今天&#xff0c;复古游戏依然是无数玩家心中不可替代的经典。Fin…...

Atmosphere-stable功能解析与实践指南:开源Switch自定义固件解决方案

Atmosphere-stable功能解析与实践指南&#xff1a;开源Switch自定义固件解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 传统Switch破解方案常面临系统稳定性差、原始系统安全风险…...

开源多人游戏解决方案:Nucleus Co-op让单机游戏秒变多人派对

开源多人游戏解决方案&#xff1a;Nucleus Co-op让单机游戏秒变多人派对 【免费下载链接】splitscreenme-nucleus Nucleus Co-op is an application that starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirro…...

利用快马平台快速构建openclaw多模型对比演示原型

最近在做一个AI模型对比的小工具&#xff0c;发现用InsCode(快马)平台来快速搭建原型特别方便。今天就来分享一下如何用这个平台快速实现一个openclaw多模型对比的演示页面。 需求分析 想做一个能直观对比不同AI模型输出的工具&#xff0c;核心功能很简单&#xff1a;输入一段文…...

VAD-LLaMA:融合长短期上下文与指令微调的视频异常检测与描述生成

1. 视频异常检测的痛点与VAD-LLaMA的突破 想象一下你是一个商场保安&#xff0c;每天盯着几十块监控屏幕。突然有个画面闪过一个人鬼鬼祟祟地撬收银台&#xff0c;但等你反应过来回放时&#xff0c;已经错过了关键几秒——这就是传统视频异常检测的典型困境&#xff1a;既难实时…...

SEO_资深专家分享SEO内容优化的核心方法

SEO内容优化的核心方法&#xff1a;资深专家分享 在当今竞争激烈的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升网站流量和品牌知名度的关键。资深专家在SEO领域积累了丰富的经验&#xff0c;他们提出了许多实用的方法来优化内容。本文将详细探…...