【打卡】牛客网:BM90 最小覆盖子串

题目:

BM65 最长公共子序列(二):

        找二者的相同部分,该部分对于二者可以不连续排列的(但是是有序的)。

BM66 最长公共子串

        找二者的相同部分,该部分对于二者是连续排列的。

本题:BM90 最小覆盖子串

        找s中包含t所有字符的部分,该部分对于s是连续排列的,对于t可以不连续排列(且可以没有顺序)。

模板的:

编程思想:采用滑动窗口法

  1. 窗口有左右两个指针。
  2. 找到一个符合条件(指包含t所有字符)的子串。
    1. 固定左指针,右指针往右走,
  3. 缩小窗口,找到最小字串。
    1. 固定右指针,左指针往左走。
    2. 记录最小的最小字串。
  4. 重复2和3,直到右指针走完。

编程细节:

  1. hash函数存储<key, slot>
    1. hash.count(c) 表示计算hash表的key中有多少c。常用于查找hash表的key是否存在。hash.count 与 hash[]的区别,什么时候用.count,什么时候用hash[]?_hash_count-CSDN博客
    2. hash表的遍历:for(auto i = hash.begin(); i != hash.end(); i++){}
      1. 此时,key为i->first,slot为i->second
  2. 考虑一些特殊用例:
    1. ​​​​​​​“abc”,"a",返回"a"
      1. ​​​​​​​在while循环中,可能窗口的左指针在右指针的右边,但是因为不满足条件,很快右指针就往右走了。
    2. "a","aa",返回""
      1. 如果hash表在进行初始化时,key=t的每个元素,slot=0;更新hash表时,出现t的元素便加一;判断是否满足条件时,判断hash表的所有key的slot是等于0(不满足条件)还是大于0(满足条件)。这种做法的特点是,对t进行去重处理了。即返回"a"。
      2. 如果hash表在进行初始化时,key=t的每个元素,slot=t的每个元素出现次数的负数;更新hash表时,出现t的元素便加一;判断是否满足条件时,判断hash表的所有key的slot是小于0(不满足条件)还是等于0(满足条件)。这种做法的特点是,在hash表初始化时便记录了t重复元素的个数。即返回""。
  3. 对字符串进行截取,比如,对str的[left,right]截取:
    1. return str.substr(left, right-left+1);
    2. return string(str.begin()+left, str.begin()+right+1);

​​​​​​​​​​​​​​​​​​​​​题目要求时间复杂度是o(n),但是感觉模板的时间复杂度是o(n^2)。因为窗口在s上滑动时,要遍历所有t,判断窗口内是否包含t的全部元素。

#include <unordered_map>
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param S string字符串 * @param T string字符串 * @return string字符串*/bool check(unordered_map<char, int> &hash){for(auto i = hash.begin(); i != hash.end(); i++){if(i->second < 0)return false;}return true;}string minWindow(string S, string T) {// write code hereint n1 = S.size();int n2 = T.size();if(n1 == 0 || n2 == 0)return "";//用hash表来判断是否包含t的元素,对hash表进行初始化unordered_map<char, int> hash;for(int i = 0; i < n2; i++){hash[T[i]] --; //易错,初始化不用0,而用t元素个数的负数。}//用于记录int ans_r = -1;int ans_l = -1;int ans_cnt = n1;//指针,用于移动int p_r = 0;int p_l = 0;for(; p_r < n1; p_r++){//右指针每次往右,都要更新hash表。if(hash.count(S[p_r]))hash[S[p_r]] ++;//满足条件while(check(hash)){//记录if(ans_cnt >= p_r - p_l + 1){ans_cnt = p_r - p_l + 1;ans_r = p_r;ans_l = p_l;}//满足条件的前提下,缩小窗口,hash表也要更新。if(hash.count(S[p_l]))hash[S[p_l]] --;p_l ++;}}if(ans_l == -1) //粗心,忘记写return ""; return S.substr(ans_l, ans_r-ans_l+1);}
};

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

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

相关文章

什么是DDOS高防ip?DDOS高防ip是怎么防护攻击的

随着互联网的快速发展&#xff0c;网络安全问题日益突出&#xff0c;DDoS攻击和CC攻击等网络威胁对企业和网站的正常运营造成了巨大的威胁。为了解决这些问题&#xff0c;高防IP作为一种网络安全服务应运而生。高防IP通过实时监测和分析流量&#xff0c;识别和拦截恶意流量&…

PattPatel-“Introduction to Computing Systems“(4)期末样卷题目解析:C语言递归

C语言的递归我觉得最主要的还是要把Patt&Patel的部分好好理解下&#xff08;因为有和硬件结合的部分&#xff09;&#xff0c;但因为今天就考试&#xff08;来不及做这样的事情&#xff09;&#xff0c;先把之前模拟卷的题目给尝试弄明白&#xff0c;然后考完试之后继续学习…

vue-ESlint代码规范及修复

1. 介绍 ESLint:是一个代码检查工具&#xff0c;用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)。 在创建项目时&#xff0c;我们使用的是 JavaScript Standard Style 代码风格的规则。 规范网址&#xff1a;https://standardjs.com/rules-zhcn.htm…

美易官方:仅差8万辆,特斯拉2023年全球销量接近奥迪

特斯拉在2023年全球销量仅差8万辆就能追平奥迪&#xff0c;这一消息引起了汽车行业的广泛关注。作为电动汽车市场的领头羊&#xff0c;特斯拉一直以创新的技术和设计引领着汽车行业的发展。而奥迪作为传统豪华汽车品牌&#xff0c;也在不断探索和尝试新的发展路径。 特斯拉在20…

力扣-刷MySQL(详细解析)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

【五】CocosCreator-CCScheduler.js源码分析

PS&#xff1a;只是看源码学习过程中把认为重要的内容以笔记的形式记录下来。 【1】HashTimerEntry&#xff1a;用于保存指定target的事件定时器相关参数的数据结构。 【2】_hashForTimers&#xff1a;targetId作为key&#xff0c;HashTimerEntry【2】对象作为value的hash数组…

uniApp 顶部导航栏右侧添加文字按钮

{"path" : "pages/allin/MessageCenter/MessageCenter","style" : {"navigationBarTitleText": "消息中心","enablePullDownRef…

torch: 返回最大的几个值--topk()

torch.topk() 是 PyTorch 中的一个函数&#xff0c;用于从张量&#xff08;tensor&#xff09;中选取最大的 k 个值及其对应的索引。这个函数对于需要找到最大值或者对数据进行排序的场景非常有用。 函数的基本语法如下: torch.topk(input, k, dimNone, largestTrue, sortedT…

如何在Eclipse IDE中安装TestNG插件

目录 使用Eclipse Marketplace安装TestNG插件 通过输入URL安装TestNG 1.点击安装新软件 2.输入URL以安装TestNG 3.遵循正常的安装过程 4.重新启动Eclipse 在Eclipse中安装TestNG插件的视频 在这篇文章中&#xff0c;我们将介绍如何在Eclipse IDE中安装TestNG插件&#x…

JVM-Arthas高效的监控工具

一、arthas介绍 3.选择监控哪个进程 4.进入具体进程 二、arthas的基础命令与基本操作 1.查询包含Java的系统属性&#xff1a; 命令&#xff1a;sysprop |grep java 1.查询不含Java的系统属性&#xff1a; 命令&#xff1a;sysprop | grep -v java 3.打印历史命令 命令&#…

Android 自动滚动的RecyclerView,手动滑动和自动滑动无缝衔接,手动滑动时数据不重复

概要 做一个自动滑动的列表&#xff0c;用于展示聊天记录或者通知栏信息等&#xff0c;还是使用主流的RecyclerView来做。网上有很多案例&#xff0c;但当手动滑动时会一直无限循环&#xff0c;数据重复的出现&#xff0c;如果想要自动滑动时能无限循环&#xff0c;手动滑动时又…

Vue Grid Layout ( 栅格布局 )

Vue Grid Layout -️ 适用 Vue.js 的栅格布局系统 (相关使用记录) 参考文章~朴&#xff1a;shu参考文章我说爱你啊中文文档官方文档 安装 npm install vue-grid-layout --save 或yarn add vue-grid-layout导入组件 import VueGridLayout from vue-grid-layout;注册组件 expor…

C语言从入门到实战——结构体与位段

结构体与位段 前言一、结构体类型的声明1.1 结构体1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 二、 结构体内存对齐2.1 对齐规则2.2 为什么存在内存对齐2.3 修改默认对齐数 三、结构体传参四、 结构体实现位段4.1 什么是位段4.2 位段…

基于springboot的流浪动物救助管理系统

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1研究背景 随着…

MStart | MStart开发与学习

MStart | MStart开发与学习 1.学习 1.MStart |开机LOG显示异常排查及调整

windows平台高dpi介绍

flutter在windows平台如何自定义dpi设置 系统层级的支持(windows平台对高dpi的支持) 主要有两点&#xff1a; 设置系统的缩放比例 (系统及系统自带的app会根据这个设置来进行缩放&#xff1b;自己的app需要结合自己设置的dpi awareness来实现对应的dpi支持)设置进程的dpi aw…

Linux系统中负载较高问题排查思路与解决方法

Load 就是对计算机干活多少的度量&#xff0c;Load Average 就是一段时间&#xff08;1分钟、5分钟、15分钟&#xff09;内平均Load。 一、Load分析&#xff1a; 情况1&#xff1a;CPU高、Load高 通过top命令查找占用CPU最高的进程PID&#xff1b;通过top -Hp PID查找占用CPU…

BIOS知识枝桠——RAID 磁盘阵列

文章目录 前言一、RAID介绍二、RAID等级分类1.RAID02.RAID13.RAID24.RAID3和RAID45.RAID5和RAID66.RAID77.RAID10 BIOS下组建RAID 前言 假设存在多块磁盘&#xff0c;如果不组建阵列&#xff0c;磁盘与磁盘之间是没有任何关系的。磁盘A和B&#xff0c;放在A中的文件与B磁盘没有…

vue中使用component中的is渲染组件如何使用,:is 等价 v-if渲染组件。

动态组件顾名思义动态加载不同的组件&#xff0c;is属性用于加载不同组件&#xff0c;传参使用属性传递 1、使用v-for遍历component&#xff0c;组件都会执行 <componentv-for"(item, index) in TAB_PANE":key"index":is"item.componentName"…

Java多线程——并发和并行、实现方法

多线程 并发和并行 实现方法 代码演示 方式一 package com.qiong.thread1;public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 20; i) {System.out.println(getName() "Hello World");}} }package com.qiong.thread1;public…