力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路(双端队列实现):

可以参考一下:力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。

使用滑动窗口有以下几个步骤:初始化双端队列(将s的前t_len个元素入队,此时检验是否满足最小覆盖子串的条件,如果满足,直接结束),接下来正式进入滑动过程。首先是进入元素(也就是第t_len+1个元素),再进行排出元素(也就是从队列中的第一个元素开始判断是否可以出队列,条件是什么呢?首先将队列中元素的个数实时的记录在g_s数组中,将字符串t中元素的个数记录在tt数组中,如果g_s数组中的每一个元素个数都大于tt中的元素个数,那么就可以出队列。),最后进行判断当下是否为可行解甚至是最优解(也就是答案子串长度最小),如果是当前的最优解,则进行记录。

代码:

C++:

class Solution {
public:bool check(vector<int>& g_s,vector<int>& tt){ //如果能对上,返回truefor(int i=0;i<60;i++){if(tt[i]==0){continue;}else if(tt[i]!=0 && g_s[i]>=tt[i]){continue;}else{return false;}}return true;}string minWindow(string s, string t) {//双端队列deque<char> q;vector<int> g_s(60,0);vector<int> tt(60,0);int res_len=0x3f3f3f3f;int idx=0;int s_Len=s.size();int t_len=t.size();if(t_len>s_Len){return "";}int idx_temp=0;string res;//初始化qfor(int i=0;i<t_len;i++){q.push_back(s[i]);g_s[s[i]-'A']++;tt[t[i]-'A']++;}if(check(g_s,tt)){for(int i=0;i<t_len;i++){res.push_back(s[i]);}return res;}//正式考察for(int i=t_len;i<s_Len;i++){int a_len=q.size();//进队列q.push_back(s[i]);g_s[s[i]-'A']++;a_len++;//出队列while(true){char temp=q.front();g_s[temp-'A']--;if(!check(g_s,tt)){g_s[temp-'A']++;break;}else{q.pop_front();a_len--;idx_temp++;}}//记录答案if(check(g_s,tt) && res_len>a_len){idx=idx_temp;res_len=a_len;}}//创造答案if(res_len==0x3f3f3f3f){return "";}int end=idx+res_len;for(int i=idx;i<end;i++){res.push_back(s[i]);}return res;}
};

病了好几天,怕Python不会写了()

Python:

class Solution:def minWindow(self, s: str, t: str) -> str:def check(g_s:List[int],tt:List[int]) -> bool:for i in range(60):if tt[i]==0:continueelif tt[i]!=0 and g_s[i]>=tt[i]:continueelse:return Falsereturn Trueq=deque()g_s=[0]*60tt=[0]*60res_len=0x3f3f3f3fidx=0s_len=len(s)t_len=len(t)if t_len>s_len:return ""idx_temp=0res=""#初始化qfor i in range(t_len):q.append(s[i])g_s[ord(s[i])-ord('A')]+=1tt[ord(t[i])-ord('A')]+=1if check(g_s,tt):for i in range(t_len):res+=s[i]return res#正式考察for i in range(t_len,s_len):a_len=len(q)#进队列q.append(s[i])g_s[ord(s[i])-ord('A')]+=1a_len+=1#出队列while 1:temp=q[0]g_s[ord(temp)-ord('A')]-=1if check(g_s,tt)==False:g_s[ord(temp)-ord('A')]+=1breakelse:q.popleft()a_len-=1idx_temp+=1#记录答案if check(g_s,tt) and res_len>a_len:idx=idx_tempres_len=a_lenif res_len==0x3f3f3f3f:return ""end=idx+res_lenfor i in range(idx,end):res+=s[i]return res

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

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

相关文章

spring源码分析-事务的底层源码-1

这里写自定义目录标题 spring事务的源码分析阅读spring事务源码的前置知识JDBC的事务spring当中和事务相关的对象spring应用程序编码spring事务的源码如何开始研究spring源码当中如何代理bean spring事务的源码分析 最近在研究seata&#xff1b;看了一下spring当中的事务有一点…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

Hypermesh碰撞安全之安全带缠绕建模

进入安全带建模&#xff08;Analysis→safety→belt routing) ①肩带的创建 注&#xff1a;end types: 表示2D和1D单元的过渡方式 ②腰带的创建 ③修改接触系数

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

【老旧小区用电安全谁能管?】安科瑞智慧用电安全管理系统解决方案

行业背景 电气火灾指由电气故障引发的火灾。每年以30%的比例高居各类火灾原因之首。以50%到80%的比例高居重特大火灾之首。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。 国务院安委会也于2017年5月至2020年4月年开展了为期3年的电气火灾综合治理工作。在各界努力的…

HJ212协议C#代码解析实现

HJ212协议C#代码解析实现 HJ212协议是环保中一个非常重要的标准协议&#xff08;字符串协议&#xff09;&#xff0c;之前写了两篇C HJ212协议解析的相关博文&#xff1a; 环保 HJ212协议解析基于Qt5.14.2的HJ212 TCP服务端接收解析入库程序 最近在学习C#&#xff0c;所以打算…

Liunx系统部署服务应用常用的命令操作

根目录下文件夹的用途 在 Linux 系统中&#xff0c;各个文件夹有着明确的目的和用途。基于您提供的列表&#xff0c;以下是这些文件夹的基本解释&#xff1a; bin: 存放二进制可执行文件&#xff0c;这些是普通用户和系统管理员常用的基本命令和应用程序。 boot: 包含启动 Li…

人工智能的发展与未来

人工智能&#xff08;Artificial Intelligence&#xff0c;简称 AI&#xff09;是一门极富挑战性的科学&#xff0c;它涉及计算机科学、控制论、信息论、语言学、神经生理学、心理学、数学、哲学等多种学科的相互渗透。人工智能的研究课题广泛&#xff0c;旨在让机器学会思考&a…

开启clas小猫咪后hosts解析失效不起作用

问题描述 开发网站时经常将域名某个域名&#xff0c;如abc.com写入hosts文件将域名解析劫持到127.0.0.1&#xff0c;方便本地测试用。 但在开启小猫咪clas后&#xff0c;hosts失效&#xff0c;访问了域名指向的真实ip。这种情况是引文dns解析被接管&#xff0c;导致hosts不能使…

蓝桥杯刷题|01普及-真题

目录 [蓝桥杯 2013 省 B] 翻硬币 题解 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2015 省 B] 移动距离 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2021 国 BC] 大写 题目描述 输入格式 输…

接口幂等性问题和常见解决方案

接口幂等性问题和常见解决方案 1.什么是接口幂等性问题1.1 会产生接口幂等性的问题1.2 解决思路 2.接口幂等性的解决方案2.1 唯一索引解决方案2.2 乐观锁解决方案2.3 分布式锁解决方案2.4 Token解决方案(最优方案) 3 Token解决方案落地3.1 token获取、token校验3.2 自定义注解,…

小蓝的漆房——算法思路

题目链接&#xff1a;1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法&#xff0c;算出涂成每一种颜色所需的天数&#xff0c;最后在所有天数中找出最小值&#xff08;由题可知&#xff0c;最多只有60种颜色&#xff0c;所以可以尝试算出每种颜色所需的时间&am…

如何降低云计算成本?

降低云计算成本的方法有很多&#xff0c;以下是一些关键的策略和建议&#xff1a; 优化资源使用&#xff1a; 自动缩放&#xff1a;根据工作负载的需求自动调整计算资源的大小。对于不需要大量扩展的低优先级工作负载&#xff0c;可以设置性能限制&#xff0c;并在适当的情况下…

SpringBoot有哪些优缺点呢

1、SpringBoot优点 简化配置&#xff1a; Spring Boot 提供了自动配置功能&#xff0c;大大简化了项目的配置过程&#xff0c;开发者不再需要手动配置大量的 XML 文件或注解。 快速启动&#xff1a; Spring Boot 可以快速启动应用程序&#xff0c;减少了开发周期&#xff0c;…

LeetCode刷题小记 八、【回溯算法】

1.回溯算法 文章目录 1.回溯算法写在前面1.1回溯算法基本知识1.2组合问题1.3组合问题的剪枝操作1.4组合总和III1.5电话号码的字母组合1.6组合总和1.7组合总和II1.8分割回文串1.9复原IP地址1.10子集问题1.11子集II1.12非递减子序列1.13全排列1.14全排列II1.15N皇后1.16解数独 写…

react中hooks使用限制

只能在最顶层使用Hook 不要在循环、条件中调用hook&#xff0c;确保总是在React函数最顶层使用它们 只能React函数中调用Hook 不要在普通的js函数中调用 在React的函数组件中调用Hook 在自定义hook中调用其他hook 原因&#xff1a; 我们每次的状态值或者依赖项存在哪里&…

springCloudeAlibaba的使用

父pom文件&#xff1a; <?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-instance"xsi:schemaLocation"http://maven.apache.o…

数据库中逻辑运算符的介绍以及优先级表

简介&#xff1a;逻辑运算符主要判断表达式的真假&#xff0c;返回值为1&#xff0c;0&#xff0c;null 其中包含&#xff1a; 逻辑非&#xff1a;not或&#xff01; 逻辑与&#xff1a;and或&& 逻辑或&#xff1a;or或|| 逻辑异或&#xff1a;XOR 1.逻辑非运算 规则…

mac打开exe文件的三大方法 mac怎么运行exe文件 mac打开exe游戏 macbookpro打开exe

exe文件是Windows系统的可执行文件&#xff0c;虽然Mac系统上无法直接打开exe文件&#xff0c;但是你可以在Mac电脑上安装双系统或者虚拟机来实现mac电脑上运行exe文件。除了这两种方法之外&#xff0c;你还可以在Mac电脑上使用类虚拟机软件打开exe文件&#xff0c;这三种方法各…

双指针 | 移动零 | 复写零

1.移动零 题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 示例&#xff1a; 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]解题思路&#xff1a; right指针一直往后移动&#xff0c;当…