3723. 字符串查询:做题笔记

目录

思路 

代码

注意点 


3723. 字符串查询

思路 

这道题感觉和常见的前缀和问题不太一样,前缀和的另一种应用:可以统计次数

这道题我们想判断一个单词的其中一段子序列A是否可以通过重新排列得到另一段子序列B。

我看到这道题的时候想着可能要判断这一段中存在的元素是否在相比较的序列中存在,额可能要用到二分查找?等等,挺麻烦的。而且这样没有考虑到如果存在两个相同的字母,好像并没有想到处理这种情况。

所以大体的思路应该是:我们判断A序列中是否存在某个字母且其个数是否和B序列中完全符合

那么前缀和在这里的作用就是按照字母统计出:该单词中每个字母在每个前缀中的个数

也就是我们之前前缀和的对象都是数字,这里我们的操作对象是字母。

一共有26个字母,因此要分别计算出这26个字母对应的前缀和,比较好的处理方式就是创建一个二维数组,行数直接为26。利用列来表示每个字母对应的前缀和

(我们这里主要利用二维数组来方便表示含义,不需要联想到实际的二维数组。记得之前在tire字符串统计算法里我们就是这样利用二维数组的,原来这样利用二维数组含义方便表示还怪常见哩hh)

由于要计算26轮前缀和,因此我们的循环最外层就是控制计算26轮的,且其指针刚好也可以代表着字母顺序,内部循环就是我们正常的前缀和步骤:遍历这个单词,如果遍历到的字母是我们目前正在统计的字母的前缀和,那么就利用前缀和计算公式q[i]=q[i-1]+a[i],由于这里我们只是统计次数,a[i]只有两种可能0/1,因此不需要多创建,直接用if语句实现即可。

(注意如何判断遍历到的字母是我们目前正在统计的字母?就是将当前字母 -a字符 得到的就是该字母在第几位,也就是我们最外层循环此时的轮数。[我们将字母用从0-25的数字来表示了])

统计出前缀和之后就是判断两段子序列中字母是否匹配了。

我们输入的abcd就是前缀和的某两个区间。我们遍历这两个区间的26个字母是否个数都相同,只要出现一个不同的就不符合题意。

代码

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e5+10;
int s[26][N];
char str[N];
signed main()
{/*ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);*/scanf("%s",str+1);//前缀和从下标为1开始for(int i=0;i<26;i++){for(int j=1;str[j];j++){if(str[j]-'a'==i)s[i][j]=s[i][j-1]+1;else s[i][j]=s[i][j-1];}}int q;cin>>q;while(q--){int a,b,c,d;cin>>a>>b>>c>>d;bool st=1;for(int i=0;i<26;i++){if(s[i][b]-s[i][a-1]!=s[i][d]-s[i][c-1]){st=0;break;}}if(st)puts("DA");else puts("NE"); }return 0;
}

注意点 

注意我们这里由于输入的是字符串,但是我们想利用前缀和,我们希望输入的时候从字符串的第二位也就是下标为1的位置开始存储,所以我们使用scanf输入,采用这样的形式

scanf("%s",str+1);

来实现。

那么我们使用了scanf,就不能再写对于cin/cout的提速的内容了。下面是解释:

习惯一下用puts实现输出内容。

这里想再记一下做另一道题的时候我用了sort函数,但没用对。在这里补充一下关于sort函数

sort(begin, end):对数组或容器中的元素进行排序。begin 是指向待排序区间第一个元素的指针或迭代器,end 是指向待排序区间最后一个元素的下一个位置的指针或迭代器

注意这个函数的参数类型。

如果想对一个,下标从0开始有n+1个元素的b[]数组进行排序:

sort(b,b+n);

不要这样写:sort(b[1],b[n])

如果我们创建的是vector类型的数组,对其元素进行排序,那么调用sort函数就需要用.begin(),.end()的参数写法

sort(myVector.begin(), myVector.end());

好啦写到这。(突然发现写文章里可以上传视频hh之前都是插链接😂)

有问题欢迎指出,一起加油!!!!

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

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

相关文章

资讯头条P3自媒体搭建

自媒体素材管理与文章管理 一.后台搭建 1.1 搭建自媒体网关 导入网关模块>>>在网关模块的pom.xml文件中添加该子模块>>>刷新maven <modules><module>heima-leadnews-app-gateway</module><!--新增--><module>heima-leadnew…

大学生租房系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 1. 系统功能…

【ppt技巧】给PPT添加打开加密密码的方法

PPT文件制作完成之后&#xff0c;为了保证内容泄露或者修改&#xff0c;我们可以给PPT文件设置一个打开密码来保护文件&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;…

如何在CentOS使用Docker搭建Rsshub服务并实现无公网IP远程访问

文章目录 1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 Rsshub是一个开源、简单易用、易于扩展的RSS生成器&#xff0c;它可以为各种内容生成RSS订阅源。 Rsshub借助于开源社…

Python-VBA编程500例-024(入门级)

字符串写入的行数(Line Count For String Writing)在实际应用中有着广泛的应用场景。常见的应用场景有&#xff1a; 1、文本编辑及处理&#xff1a;在编写或编辑文本文件时&#xff0c;如使用文本编辑器或文本处理器&#xff0c;经常需要处理字符串并确定其在文件中的行数。这…

C#开发者必备!快速掌握onnxruntime实现YOWOv2视频动作检测技术!

C#开发者必备&#xff01;快速掌握onnxruntime实现YOWOv2视频动作检测技术&#xff01; 目录 介绍 效果 模型信息 项目 代码 Form1.cs YOWOv2.cs 下载 介绍 YOWOv2: A Stronger yet Efficient Multi-level Detection Framework for Real-time Spatio-temporal Action…

持续集成流水线介绍(CI)

目录 一、概述 二、持续集成的典型操作流程 2.1 概述 2.2 持续集成的操作流程图 2.3 持续集成关键流程说明 三、构建持续集成流水线的方式 3.1 依托云厂商能力 3.2 采用开源产品 3.3 企业自研 四、构建持续化集成流水线 4.1 基于GitHub的持续集成流水线&#xff08;公…

【氮化镓】GaN器件中关态应力诱导的损伤定位

概括总结&#xff1a; 这项研究通过低频1/f噪声测量方法&#xff0c;探究了在关态&#xff08;OFF-state&#xff09;应力作用下&#xff0c;AlGaN/GaN高电子迁移率晶体管&#xff08;HEMTs&#xff09;中由应力引起的损伤的定位。研究中结合了电致发光&#xff08;EL&#xf…

如何合理利用chatgpt写高质量论文,10分钟速成(四)

演示站点&#xff1a; https://www.cnsai.net/ 论文模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、文章结构剖析 如果我们经常去写文章或者是去看别人的文章&#xff0c;你会发现文章分为以下几部分 标题大纲前言/导语正文&#xff08;不同的结构&#xff09;结尾呼…

Linux查看重启时间,关机时间,运行时长的指令

Linux查看重启时间&#xff0c;关机时间&#xff0c;运行时长的指令 查看上次启动时间查看系统重启时间查看关机时间查看运行时长 这里测试环境为Ubuntu 16.04 查看上次启动时间 who -b可以通过who --help查看who指令的更多功能 查看系统重启时间 可以通过下面的方式来进行…

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

农村分散式生活污水分质处理及循环利用技术指南

标准已完成意见征集&#xff1a; 本文件给出了农村分散式生活污水分质处理及循环利用的总则、污水收集、污水分质处理、资源化利用、利用模式、运维管理等的指导。 本文件适用于农村分散式生活污水分质处理及循环利用的设施新建、扩建和改建工程的设计、施工与运维。 注:本文件…

算法系列--动态规划--回文子串系列

&#x1f495;"我们好像在池塘的水底&#xff0c;从一个月亮走向另一个月亮。。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–回文子串系列 今天为大家带来的是算法系列--动态规划--回文子串系列(1),本文重点掌握如何快速判…

Echarts地图之——如何给地图添加外边框轮廓

有时候我们希望给地图外围加一圈边框来增加美感 但实际情况中&#xff0c;我们需要把国界的边框和各个省份属于国界的边框相吻合&#xff0c;否则就会造成两者看起来是错位的感觉 这就需要我们把echarts registerMap的全国省份json和国界边框json的坐标相一致。 这个json我们可…

佳能机械制造将莅临2024第13届生物发酵产品与技术装备展

参展企业介绍 过滤与分离设备专业制造商 •碟式离心机及机组模块、系统 •卧式螺旋卸料沉降离心机及系统 江苏佳能机械制造有限公司位于中国“龙虾之都”——江苏盱眙&#xff0c;地处淮安西南部&#xff0c;淮河下游&#xff0c;洪泽湖南岸&#…

网络七层模型之表示层:理解网络通信的架构(六)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【LeetCode热题100】124.二叉树的最大路径和(二叉树)

一.题目要求 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root …

Doris实践——叮咚买菜基于OLAP引擎的应用实践

目录 前言 一、业务需求 二、选型与对比 三、架构体系 四、应用实践 4.1 实时数据分析 4.2 B端业务查询取数 4.3 标签系统 4.4 BI看板 4.5 OLAP多维分析 五、优化经验 六、总结 原文大佬介绍的这篇Doris数仓建设实践有借鉴意义的&#xff0c;这些摘抄下来用作沉淀学…

docker-compose mysql

使用docker-compose 部署 MySQL&#xff08;所有版本通用&#xff09; 一、拉取MySQL镜像 我这里使用的是MySQL8.0.18&#xff0c;可以自行选择需要的版本。 docker pull mysql:8.0.18二、创建挂载目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /dat…

软件测试基础理论、测试用例及设计方法、易混淆概念总结【软件测试】

一.软件测试基础理论 1.软件定义 软件是计算机系统中与硬件相互依存的一部分&#xff0c;包括程序、数据以及与其相关文档 的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列&#xff1b; 数据是使程序能正常操作信息的数据结构&#xff1b; 文档是与程序开发、维…