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

Trie 字典树(c++)(前缀)

题目链接:用户登录

题目:

样例:

输入
5 3
aaa
aba
aabbaa
abbbbb
cdd
aabba
abc
abab
输出
Y
N
N

思路:

        根据题目意思,要用到 Trie 字典树算法。

Trie 字典树,顾名思义,“字典”,我们查字典的时候,都是找开头的几个字符,来获取我们的整个字符,Trie 字典树,就是通过 前缀字符的一步步扩展。最后查找的时候就是根据我们扩展字典树的步骤来变相查找。字典树,我们也要建立一个 root 跟

比如 :给出以下的几个字符

abcdf

bgre

abfr

baef

最后获得的字典树为:

下面给出 Trie 字典树封装的结构体:


// 定义 Tries 结构体,封装
struct Tries
{// son 用于存储 字符,idx 对应映射整数地址int son[N][26],idx;// 构造 Tries 初始化inline Tries(){memset(son,0,sizeof son);idx = 0;}// 字符串 插入操作inline void Insert(string str){int p = 0;	// 对应root根树的 映射地址int len = str.size();	// 计算 字符串 的长度,方便遍历for(int i = 0;i < len;++i){int u = str[i] - 'a';	// 将 单个字符 转化为 映射整数地址if(!son[p][u]) son[p][u] = ++idx;	// 如果没有当前 地址,扩展映射p = son[p][u];	// 往 存在的结点地址 开始下一次检索}return ;}// 字符串 查找操作 和 插入操作相似,只是不会新建结点inline bool query(string str){int p = 0;	// 对应root根树的 映射地址int len = str.size();	// 计算 字符串 的长度,方便遍历for(int i = 0;i < len;++i){int u = str[i] - 'a';	// 将 单个字符 转化为 映射整数地址if(!son[p][u]) return false;	// 如果没有当前 地址,扩展映射p = son[p][u];	// 往 存在的结点地址 开始下一次检索}return true;}
}tree;

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define int long long
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;// 定义 Tries 结构体,封装
struct Tries
{// son 用于存储 字符,idx 对应映射整数地址int son[N][26],idx;// 构造 Tries 初始化inline Tries(){memset(son,0,sizeof son);idx = 0;}// 字符串 插入操作inline void Insert(string str){int p = 0;	// 对应root根树的 映射地址int len = str.size();	// 计算 字符串 的长度,方便遍历for(int i = 0;i < len;++i){int u = str[i] - 'a';	// 将 单个字符 转化为 映射整数地址if(!son[p][u]) son[p][u] = ++idx;	// 如果没有当前 地址,扩展映射p = son[p][u];	// 往 存在的结点地址 开始下一次检索}return ;}// 字符串 查找操作 和 插入操作相似,只是不会新建结点inline bool query(string str){int p = 0;	// 对应root根树的 映射地址int len = str.size();	// 计算 字符串 的长度,方便遍历for(int i = 0;i < len;++i){int u = str[i] - 'a';	// 将 单个字符 转化为 映射整数地址if(!son[p][u]) return false;	// 如果没有当前 地址,扩展映射p = son[p][u];	// 往 存在的结点地址 开始下一次检索}return true;}
}tree;
int n,k;
string s;
inline void solve()
{cin >> n >> k;while(n--){cin >> s;tree.Insert(s);}while(k--){cin >> s;if(tree.query(s)) cout << "Y" << endl;else cout << "N" << endl;}
}signed main()
{
//	freopen("a.txt", "r", stdin);IOS;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}

最后提交:

相关文章:

Trie 字典树(c++)(前缀)

题目链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 5 3 aaa aba aabbaa abbbbb cdd aabba abc abab 输出 Y N N 思路&#xff1a; 根据题目意思&#xff0c;要用到 Trie 字典树算法。 Trie 字典树&#xff0c;顾名思义&#xff0c;“字典”&#xff0…...

全球移动通信(2G/3G/4G/5G)频谱分布情况

一、概述 随着通信技术的不断发展&#xff0c;全球各国都在积极推进2G、3G、4G、5G网络的建设和应用。根据FCC统计&#xff0c;目前全球移动通信频谱分布如下&#xff1a; 二、分布 &#xff08;一&#xff09;俄罗斯 2G&#xff1a;主要使用900MHz和1800MHz两个频段。其中&…...

【04】GeoScene导出海图或者电子航道图000数据成果

1创建一个带有覆盖面和定义的产品 如果你没有已存在的S-57数据&#xff0c;你可以通过捕捉新的产品覆盖范围&#xff08;多边形产品范围&#xff09;及其所需的产品定义信息&#xff08;产品元数据&#xff09;来为新产品创建基础。 注&#xff1a; 如果你已经有一个S-57数据…...

安卓端出现https请求失败(转)

背景# 某天早上&#xff0c;正在一个会议时&#xff0c;突然好几个同事被叫出去了&#xff1b;后面才知道&#xff0c;是有业务同事反馈到领导那里&#xff0c;我们app里面某个功能异常。 具体是这样&#xff0c;我们安卓版本的app是禁止截屏的&#xff08;应该是app里做了拦…...

appium2.0.1安装完整教程+uiautomator2安装教程

第一步&#xff1a;根据官网命令安装appium&#xff08;Install Appium - Appium Documentation&#xff09; 注意npm前提是设置淘宝镜像&#xff1a; npm config set registry https://registry.npmmirror.com/ 会魔法的除外。。。 npm i --locationglobal appium或者 npm…...

Hbase的Rowkey设计

Hbase的Rowkey设计 rowkey设计 # 1&#xff09;长度原则# 最大64KB&#xff0c;推荐长度10~100 byte# 最好设为8的倍数&#xff0c;能短则短&#xff0c;rowkey如果太长会影响性能。# 2&#xff09;唯一原则&#xff1a;rowkey应该具备唯一性# 3&#xff09;散列原则…...

软考机考考试第一批经验分享

由于机考的特殊性&#xff0c;考试环境与传统笔试环境有所不同。下面是与考试环境相关的总结&#xff1a; 草稿纸&#xff1a;考场提供足够数量的草稿纸&#xff0c;每位考生都会分发一张白纸作为草稿纸。在草稿纸上需要写上准考证号。如果不够用&#xff0c;可以向监考老师再次…...

架构简洁之道有感,谈谈软件组件聚合的张力

配图由腾讯混元助手生成 这篇文章介绍了软件架构设计中组件设计思想&#xff0c;围绕“组件间聚合的张力”这个有意思的角度&#xff0c;介绍了概念&#xff0c;并且结合架构设计示例对这个概念进行了进一步阐述。 组件聚合&#xff1f;张力&#xff1f;这标题&#xff0c;有种…...

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…...

金智融门户(统一身份认证)同步数据至钉钉通讯录

前言:因全面使用金智融门户和数据资产平台,二十几个信息系统已实现统一身份认证和数据同步,目前单位使用的钉钉尚未同步组织机构和用户信息,职工入职、离职、调岗时都需要手工在钉钉后台操作,一是操作繁琐,二是钉钉通讯录更新不及时或经常遗漏,带来管理问题。通过金智融…...

服务器RAID配置及功能介绍

服务器RAID配置及功能介绍 一、RAID磁盘阵列详解1.RAID磁盘阵列介绍2.RAID 03.RAID14.RAID35.RAID56.RAID67.RAID 10总结阵列卡介绍 一、RAID磁盘阵列详解 1.RAID磁盘阵列介绍 ①是Redundant Array of lndependent Disks的缩写中文简称为独立冗余磁盘阵列。 ②把多块独立的物…...

vue + element 实现鼠标左右滑动效果

我用了element中的走马灯&#xff0b;overflow-x: auto; html &#xff08;复制后格式化一下&#xff09; <div class"scroll" id"entrance"><el-carousel height"150px" :autoplay"false" :loop"false" arrow&q…...

gitlab 安装

1.安装依赖 sudo apt updatesudo apt-get upgradesudo apt-get install curl openssh-server ca-certificates postfix安装gitlab curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash官网下载安装包 要选ubuntu focal 安…...

idea中定时+多数据源配置

因项目要求,需要定时从达梦数据库中取数据,并插入或更新到ORACLE数据库中 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-…...

Python---多任务的介绍

1. 提问 利用现学知识能够让两个函数或者方法同时执行吗? 不能&#xff0c;因为之前所写的程序都是单任务的&#xff0c;也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行&#xff0c;要想实现这种操作就需要使用多任务。 多任务的最大好处是充分利用CPU资源&…...

Kubernetes 的用法和解析 -- 4

一.Deployment 资源详解 如果Pod出现故障&#xff0c;对应的服务也会挂掉&#xff0c;所以Kubernetes提供了一个Deployment的概念 &#xff0c;目的是让Kubernetes去管理一组Pod的副本&#xff0c;也就是副本集 &#xff0c;这样就能够保证一定数量的副本一直可用&#xff0c;…...

【fabrc.js】 操作鼠标自由绘制图形:矩形、圆形、直线等图形【画图功能】

前言&#xff1a; 在图形编辑器类型的项目当中&#xff0c;通过键盘触发想要绘制的图形类型&#xff0c;然后通过鼠标在fabric画布上自由绘制你想需要的内容。从画基本的矩形、圆形、直线、文本、三角形、折线等功能中&#xff0c;可以扩展出“钢笔path贝塞尔路径”、“多图形组…...

WPF 显示PDF、PDF转成图片

1.NuGet 安装 O2S.Components.PDFView4NET.WPF 2.添加组件 工具箱中&#xff0c;空白处 右键&#xff0c;选择项 WPF组件 界面&#xff0c;选择NuGet安装库对面路径下的 O2S.Components.PDFView4NET.WPF.dll 3.引入组件命名空间&#xff0c;并使用 <Windowxmlns"htt…...

CODESYS的Robotics_PickAndPlace_without_Depictor例程解释

1.简介 在CODESYS的例程中&#xff0c;有一个例程演示了如何控制delta机械手从一个移动的转盘中拾取一个工件&#xff08;ring&#xff0c;圆环&#xff09;&#xff0c;然后放到移动的传送带上的托盘&#xff08;cone&#xff0c;圆锥&#xff09;中。这个例程在【C:\Program…...

通过全流量分析Web业务性能好坏

随着全球商业环境的不断发展和变化&#xff0c;业务性能的重要性愈发凸显。无论是传统实体企业还是纯线上企业&#xff0c;业务性能都是其核心竞争力和稳定运营的关键要素。良好的业务性能不仅可以提升客户满意度、增加市场份额&#xff0c;还可以降低成本、提高效率。 本文章…...

【C语言】自定义类型——枚举、联合体

引言 对枚举、联合体进行介绍&#xff0c;包括枚举的声明、枚举的优点&#xff0c;联合体的声明、联合体的大小。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 枚举 枚举…...

大模型自定义算子优化方案学习笔记:CUDA算子定义、算子编译、正反向梯度实现

01算子优化的意义 随着大模型应用的普及以及算力紧缺&#xff0c;下一步对于计算性能的追求一定是技术的核心方向。因为目前大模型的计算逻辑是由一个个独立的算子或者说OP正反向求导实现的&#xff0c;底层往往调用的是GPU提供的CUDA的驱动程序。如果不能对于整个计算过程学习…...

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…...

最新AI绘画Midjourney绘画提示词Prompt教程

一、Midjourney绘画工具 SparkAi【无需魔法使用】&#xff1a; sparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的…...

AI助力DevOps新时代

根据2023年Gitlab全球DevSecOps报告&#xff0c;62%使用AI和ML的开发人员表示他们正在使用AI来检查代码&#xff0c;而2022年这一比例只有51%。 人工智能在 DevOps 中的作用 虽然今年年初&#xff0c;随着GPT的爆火&#xff0c;AI技术逐渐深入人心&#xff0c;但在很早以前&…...

Spring之容器:IOC(2)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

Spring 依赖查找知识点总结

前言 源码在我github的guide-spring仓库中&#xff0c;可以克隆下来 直接执行。 我们本文主要来介绍依赖查找的使用示例 依赖查找 什么是依赖查找 依赖查找并不是 Spring 框架特有的概念&#xff0c;它是一种在软件开发中获取依赖对象的方式。它通常用于获取运行时需要的服…...

html5新增特性

对于这行代码&#xff0c;要写在html页面的最前端&#xff1a; <!DOCTYPE html> 为什么要写在前面&#xff1f; 这是声明&#xff0c;是html5的新特性 对于html4来说&#xff0c;它有三种声明格式&#xff0c;而html5只需要统一声明&#xff0c;用来告诉浏览器文档使用…...

4、APScheduler: 详解Scheduler种类用法、常见错误与解决方法【Python3测试任务管理总结】

调度器(Scheduler)是将其他组件绑在一起的关键。通常在应用程序中只运行一个调度器。应用程序开发者通常不直接处理作业存储(job stores)、执行器(executors)或触发器(triggers)。相反,调度器提供了适当的接口来处理所有这些。通过调度器配置作业存储和执行器,以及添…...

微服务实战系列之ZooKeeper(实践篇)

前言 关于ZooKeeper&#xff0c;博主已完整的通过庖丁解牛式的“解法”&#xff0c;完成了概述。我想掌握了这些基础原理和概念后&#xff0c;工作的问题自然迎刃而解&#xff0c;甚至offer也可能手到擒来&#xff0c;真实一举两得&#xff0c;美极了。 为了更有直观的体验&a…...