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

力扣 最小覆盖子串

最小覆盖子串

https://leetcode.cn/problems/minimum-window-substring/

题目描述

在这里插入图片描述

题目分析f

覆盖子串:首先根据题意,要求目标字符串的元素必须都在子串中出现过,这表明可以是乱序出现。所以在解决问题是我们需要对子串和目标字符串做匹配,查看子串是否符合要求。
∀ s ∈ S t s . t . s ∈ A n s \begin{align} \forall &s \in \boldsymbol{S_t} \\s.t. \qquad &s \in \boldsymbol{Ans}\end{align} s.t.sStsAns
比较朴素的思路:采用遍历的方法查看是否任意 s ∈ S t s \in \boldsymbol{S_t} sSt都在 A n s \boldsymbol{Ans} Ans
更好的方法:通过某种表示手段表示子串和目标字符串从而判断 A n s \boldsymbol{Ans} Ans是否覆盖 S t \boldsymbol{S_t} St(表示方法判断的复杂度应是 O ( 1 ) O(1) O(1)

题目解决

根据题目提示,确定使用滑动窗口的办法。两个注意点,窗口扩大和窗口缩小
当窗口扩大时注意是否满足条件,当满足条件时尝试缩小窗口。注意每当满足条件时,更新最优窗口大小。

遍历覆盖比较法

当满足覆盖时,缩小窗口,一个个判断
代码

class Solution {
public:bool is_covered(int cnt_s[], int cnt_t[]) {for (int i = 'A'; i <= 'Z'; i++) {if (cnt_s[i] < cnt_t[i]) {return false;}}for (int i = 'a'; i <= 'z'; i++) {if (cnt_s[i] < cnt_t[i]) {return false;}}return true;}string minWindow(string s, string t) {int slen = s.size(), tlen = t.size();string ans;if(slen < tlen) return ans;int ansleft = -1, ansright = slen;int cntwind[128] = {0}, cntt[128]={0};for(char &c : t){++cntt[c];}int left = 0;for(int right = 0; right < slen; ++right){++cntwind[s[right]];while(is_covered(cntwind, cntt)){if(right - left < ansright - ansleft){ansleft = left;ansright = right;}--cntwind[s[left]];++left;}   }return ansleft < 0 ? "" : s.substr(ansleft, ansright - ansleft + 1);}
};

表示覆盖比较法

通过预先设定窗口表示—— C u ( S t ) C_u(S_t) Cu(St)
通过种类,个数的方法表示是否覆盖
实际上通过种类数和个数表示了 S t S_t St,通过维护cntwind、covered_num判断窗口是否覆盖了 S t S_t St
融合了哈希和动归的思想

class Solution {
public:string minWindow(string s, string t) {int slen = s.size(), tlen = t.size();string ans;if(slen < tlen) return ans;int ansleft = -1, ansright = slen;int cntwind[128] = {0};int covered_num = 0;for(char &c : t){if(cntwind[c] == 0){++covered_num;}--cntwind[c];}int left = 0;for(int right = 0; right < slen; ++right){++cntwind[s[right]];if(cntwind[s[right]] == 0) --covered_num;while(covered_num == 0){if(right - left < ansright - ansleft){ansleft = left;ansright = right;}--cntwind[s[left]];if(cntwind[s[left]] < 0) ++covered_num;++left;}   }return ansleft < 0 ? "" : s.substr(ansleft, ansright - ansleft + 1);}
};

总结,巧妙的通过数字的变化表示了窗口状态的变化
++cntwind[s[right]]; if(cntwind[s[right]] == 0) --covered_num;

相关文章:

力扣 最小覆盖子串

最小覆盖子串 https://leetcode.cn/problems/minimum-window-substring/ 题目描述 题目分析f 覆盖子串&#xff1a;首先根据题意&#xff0c;要求目标字符串的元素必须都在子串中出现过&#xff0c;这表明可以是乱序出现。所以在解决问题是我们需要对子串和目标字符串做匹配&a…...

python的内存管理机制

python的内存管理机制主要分为三个部分&#xff1a;引用计数、垃圾回收和内存池机制。 引用计数机制&#xff1a; python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数&#xff0c;当对象不再被使用时&#xff0c;引用计数为0&#xff0c…...

阿布量化:基于 Python 的量化交易框架

阿布量化&#xff08;AbuQuant&#xff09; 是一个开源的量化交易框架&#xff0c;专为金融领域的研究者和交易者设计。它基于 Python 语言开发&#xff0c;提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…...

【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档&#xff1a; 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ&#xff0c;目前阿里云支持4.x和5.x版本 项目集成思路&…...

Pikachu-Cross-Site Scripting-反射型xss(post)

查看源代码 &#xff0c;这是需要先登录&#xff0c;然后再去做xss攻击 使用admin &#xff0c;123456 登陆; 登陆后&#xff0c;输入的message 内容直接返回 输入 <script>alert(1)</script> 得到xss攻击结果...

Vue3 工具函数(总结)

目录 前言 1.isRef 2.isReactive 3.isReadonly 4.isProxy 5.toRef 6.toRefs 7.unref 8.shallowRef 9.shallowReactive 10.triggerRef 11.customRef 12.markRaw 13.toRaw 14.readonly 15.watchEffect 前言 在 Vue 3 中&#xff0c;除了核心的响应式 API&#x…...

(undone) MIT6.824 Lab1

参考&#xff1a;http://nil.csail.mit.edu/6.824/2021/labs/lab-mr.html task1: 熟悉讲义&#xff0c;尤其是搞明白如何运行测试程序(完成) ------------------------------------------------ start 先看 Introduction 我们的目标&#xff1a;构建一个MapReduce系统。 细节&…...

SpringMVC——REST

路径请求方式请求行为 查询&#xff1a;GET 新增&#xff1a;POST 修改&#xff1a;PUT 删除&#xff1a;DELETE 有重复的东西怎么办...

【牛客网刷题记录】【java】二叉树

&#xff08;1&#xff09;二叉树的前中后遍历 最基本的树的遍历&#xff0c;不会可以重开了 public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param root TreeNode类 * return int整型一维…...

一文讲透大语言模型构建流程

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…...

VR视频怎样进行加密和一机一码的使用?--加密(一)

在视频加密领域&#xff0c;我们常见接触的就是在普通设备上使用的加密视频&#xff0c;如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受&#xff0c;不仅在游戏行业应用较广&#xff0c;在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…...

Ubuntu启动后第一次需要很久才能启动GTK应用问题

Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后&#xff0c;设备重启&#xff0c;发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢&#xff0c;需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案&#xff0c;但是没…...

栏目二:Echart绘制动态折线图+柱状图

栏目二&#xff1a;Echart绘制动态折线图柱状图 配置了一个ECharts图表&#xff0c;该图表集成了数据区域缩放、双Y轴显示及多种图表类型&#xff08;折线图、柱状图、象形柱图&#xff09;。图表通过X轴数据展示&#xff0c;支持平滑折线展示比率数据并自动添加百分比标识&…...

Gromacs——使用过程中暴露问题分析及学习

gromacs——突变残基蛋白电场MD和基本分析从入门到发SCIENCE&#xff1a;基于Gromacs的蛋白小分子动态模拟全过程解析水溶性蛋白模拟全过程&#xff1a;从准备蛋白结构文件&#xff08;top、itp、gro文件生成&#xff09;到模拟数据分析GromacsGROMACS 教程&#xff1a;蛋白配体…...

Webpack模式-Resolve-本地服务器

目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖&#xff0c;这些模块可能来自于自己编写的代码&#xff0c;也可能来自第三方库&#xff0c;在 Webpack 中&#xff0c;resolve 是用于解析模块依赖的配置项&#xff0c;它决定了 We…...

【LLM论文日更】| 通过指令调整进行零样本稠密检索的无监督文本表示学习

论文&#xff1a;https://arxiv.org/pdf/2409.16497代码&#xff1a;暂未开源机构&#xff1a;Amazon AGI、宾夕法尼亚州立大学领域&#xff1a;Dense Retrieval发表&#xff1a;Accepted at DCAI24 workshopCIKM2024 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如…...

02.01、移除重复节点

02.01、[简单] 移除重复节点 1、题目描述 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 2、解题思路 为了实现这一目标&#xff0c;我们可以使用一个哈希表&#xff08;或集合&#xff09;来记录已经遇到的节点值&#xff0c;逐步遍历链表并删…...

旅游推荐|旅游推荐系统|基于Springboot+VUE的旅游推荐系统设计与实现(源码+数据库+文档)

旅游推荐系统 目录 基于java的旅游推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xf…...

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目&#xff0c;没记错的话&#xff0c;昨天涨了3000多的star&#xff0c;今天又新增2000star。一款抓取和解析工具&#xff0c;简单写个demo感受下 这里我们使用cra…...

ESP8266 AT指令透传开发实战:MCU+WiFi模组协同设计指南

1. 项目概述本项目聚焦于ESP8266 WiFi通信模组的底层通信验证与典型物联网功能实现&#xff0c;核心目标是建立一套可复现、可扩展的AT指令调试与网络数据交互验证流程。区别于SDK二次开发模式&#xff0c;本方案采用MCUESP8266的经典分立架构&#xff0c;将ESP8266严格定位为透…...

Groq API免费体验指南:手把手教你用Llama 3.1搭建个人AI助手(附Python调用代码)

Groq API免费体验指南&#xff1a;手把手教你用Llama 3.1搭建个人AI助手&#xff08;附Python调用代码&#xff09; 在AI技术快速发展的今天&#xff0c;开发者们对高性能大模型的需求与日俱增。Groq作为新兴的AI服务提供商&#xff0c;以其独特的硬件架构和免费API政策&#…...

Windows触控板驱动终极指南:让Apple触控板在PC上完美运行

Windows触控板驱动终极指南&#xff1a;让Apple触控板在PC上完美运行 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad…...

Ubuntu上nvidia-smi报错Driver/library version mismatch?不用重启的3个排查与修复步骤

Ubuntu上nvidia-smi报错Driver/library version mismatch的深度修复指南 当你正准备开始一天的深度学习训练或图形渲染工作时&#xff0c;突然发现nvidia-smi命令报出"Driver/library version mismatch"错误&#xff0c;这无疑是令人沮丧的。本文将带你深入理解这个问…...

AI大模型进阶指南:从入门到实战,这份89份资料包助你成为行业精英!AI大模型学习和八股文资料合集

随着人工智能技术的飞速发展&#xff0c;AI大模型&#xff08;如GPT、LLaMA、ChatGLM&#xff09;已成为推动行业变革的核心力量。无论是开发者、研究者&#xff0c;还是产品经理&#xff0c;掌握大模型的核心技术与应用方法都至关重要。然而&#xff0c;面对海量学习资源&…...

LCD显示开发常见问题:当两个.c文件包含同一个数组定义时(L6200E错误全解析)

LCD显示开发中的重复定义陷阱&#xff1a;L6200E错误深度解析与最佳实践 1. 从现象到本质&#xff1a;理解L6200E错误的根源 在嵌入式LCD显示开发中&#xff0c;当工程规模逐渐扩大&#xff0c;模块化程度提高时&#xff0c;开发者常会遇到一个令人困惑的链接错误&#xff1a;L…...

简单指南:如何在Linux上使用Waydroid快速运行Android应用

简单指南&#xff1a;如何在Linux上使用Waydroid快速运行Android应用 【免费下载链接】waydroid Waydroid uses a container-based approach to boot a full Android system on a regular GNU/Linux system like Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/wa/waydro…...

计算机毕业设计springboot校园招聘推荐系统 基于SpringBoot的高校毕业生智能就业推荐平台设计与实现 SpringBoot框架下大学生求职信息精准匹配系统开发

计算机毕业设计springboot校园招聘推荐系统26a319 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。二十一世纪以来&#xff0c;信息技术与网络科技的飞速发展深刻重塑了社会各领域…...

实测PyTorch 2.9镜像:开箱即用GPU加速,AI开发效率提升50%

实测PyTorch 2.9镜像&#xff1a;开箱即用GPU加速&#xff0c;AI开发效率提升50% 你是不是也受够了这样的循环&#xff1a;新项目想用最新的PyTorch 2.9和CUDA 12.1&#xff0c;但手头的老项目还卡在PyTorch 1.x和CUDA 11.6上。每次切换项目&#xff0c;不是环境冲突就是驱动报…...

Lychee Rerank MM惊艳案例:医学影像DICOM缩略图+放射科报告文本语义对齐

Lychee Rerank MM惊艳案例&#xff1a;医学影像DICOM缩略图放射科报告文本语义对齐 医学影像与报告文本的精准匹配一直是医疗AI领域的核心挑战。传统的基于关键词的检索方式难以理解影像内容与报告描述之间的深层语义关联&#xff0c;而Lychee Rerank MM的出现为这一难题提供了…...