1125 子串与子列 (暴力搜索,PAT甲级中文版,C++实现)

ops/2024/12/15 21:41:08/

子串是一个字符串中连续的一部分,而子列是字符串中保持字符顺序的一个子集,可以连续也可以不连续。例如给定字符串 atpaaabpabttpabt是一个子串,而 pat 就是一个子列。

现给定一个字符串 S 和一个子列 P,本题就请你找到 S 中包含 P 的最短子串。若解不唯一,则输出起点最靠左边的解。

输入格式:

输入在第一行中给出字符串 S,第二行给出 P。S 非空,由不超过 104 个小写英文字母组成;P 保证是 S 的一个非空子列。

输出格式:

在一行中输出 S 中包含 P 的最短子串。若解不唯一,则输出起点最靠左边的解。

输入样例:

atpaaabpabttpcat
pat

输出样例:

pabt

代码长度限制

16 KB

时间限制

300 ms

内存限制

64 MB

栈限制

8192 KB

一道伪装成乙级的甲级题(= =)

思路:首先,注意到子列和子串的首元素都是相同的,同时为了保证最短,则它们的尾元素也必须相同。那么我们可以以子列的首元素开始进行在字符串的遍历搜索,搜索直到字列元素都被遍历过一遍。

因为子串包含字子列,而给出了子列,那么我们只需要

1. 当枚举到子列的元素后,将已遍历子列的位置向后移动,直到对子列完全遍历;

2. 如果没有枚举到子列元素,就单纯向后枚举。在此期间无论是否枚举到,已遍历字符串的位置都会增加,用于形成子串;

3. 如果子列已经完全被遍历,那么记录这个字串的左右端点和端点差;

4. 对于端点差,如果下次的端点差大于本次的端点差,或者相同,那么我们都应该用本次的,直到出现更小的端点差。

具体细节在注释里给出。

#include <iostream>
#include <string>
using namespace std;int main(){string s;string p;cin >> s;cin >> p;int left=0,right=0; // 标定开始区间与结尾区间int minn = 10000;   // 记录开始与结尾区间之差的最小值for(int i=0;i<s.length();i++){if(s[i] == p[0]){ // 以子列的第一个元素作为字串的开头int pos = 1;  // pos = 0是子列的第一个,现遍历寻找第二个子列元素// 开始循环遍历字符串,与子列匹配for(int j = i + 1;j < s.length();j++){// 如果区间比minn大的,直接忽略,因为我们要最小值// 如果区间与minn相同,但已经有minn了,那么用之前的minn,即取左边的if(minn <= j - i) continue;if(s[j] == p[pos]) pos++; // 若有匹配到,则子列继续匹配下一个元素if(pos == p.length()){ //子列所有元素全部匹配完毕,则记录左右区间left = i;right = j;minn = j - i;  // 标记为最小区间break;  // 本次匹配完成}}}}// 将区间输出即可。for(int i = left;i <= right;i++)cout << s[i];}

代码验证无误。


http://www.ppmy.cn/ops/142209.html

相关文章

【Zabbix】解决乱码问题

1. 在控制面板-外观和个性化-字体里面找到楷体 2. 上传至/usr/share/zabbix/assets/fonts/&#xff0c;注意命名要小写 3. 修改/usr/share/zabbix/include/defines.inc.php内容 将defines.inc.php中的内容为simkai 4. 刷新页面解决

Linux 添加spi-nor flash支持

1. spi-nor flash简介 在嵌入式ARM开发过程中通常会使用到spi-nor flash&#xff0c;主要用于固化u-boot镜像以支持spi方式启动系统。目前常用的spi-nor flash有gd25wq128e、w25q128等flash芯片&#xff0c;下述以gd25wq128e为例进行讲解。 2.调试通常遇到的问题 无法识别到…

protobuf c++开发快速上手指南

1、环境准备 在c环境使用 protobuf&#xff0c;需要安装protobuf runtime以及protobuf的编译器&#xff1a;protoc&#xff0c;其作用如下表格&#xff1a; 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意&#xff1a;…

bain.js(十二):RNN神经网络实战教程 - 音乐乐谱生成 -人人都是作曲家~

系列文章&#xff1a; &#xff08;一&#xff09;&#xff1a;可以在浏览器运行的、默认GPU加速的神经网络库概要介绍&#xff08;二&#xff09;&#xff1a;项目集成方式详解&#xff08;三&#xff09;&#xff1a;手把手教你配置和训练神经网络&#xff08;四&#xff09…

如何实现后端返回excel文件,在前端下载功能

前言 简单记录一下&#xff0c;excel文件导出下载功能 一、后端接口返回excel文件 把自己生成的workbook 以文件流的方式&#xff0c;返回前台 Workbook workbook employeeConfirmationDefectService.exportPoorPolishExcel(budatBegin, budatEnd, queryWrapper);//传输到…

触想工业一体机为高速公路远程供电提供稳定保障

一、行业应用概述 放眼高速公路沿线场景&#xff0c;常常会看到许多外场设备&#xff0c;比如摄像头、气象仪、情报板、ETC门架等&#xff0c;这些设备的应用都离不开电力支撑。 △ 高速公路外场设备 然而&#xff0c;随着高速里程越来越长&#xff0c;在远离市电的情况下&…

数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)

数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读&#xff0c;感受一下…

MFC学习笔记专栏开篇语

MFC&#xff0c;是一个英文简写&#xff0c;全称为 Microsoft Foundation Class Library&#xff0c;中文翻译为微软基础类库。它是微软开发的一套C类库&#xff0c;是面向对象的函数库。 微软开发它&#xff0c;是为了给程序员提供方便&#xff0c;减少程序员的工作量。如果没…