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

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

可以参考一下:力扣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.hqwc.cn/news/545282.html

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

相关文章

【python】集合

前言 简洁整理&#xff0c;无废话 集合概念 含义&#xff1a;跟数学中的基本一样 形式&#xff1a;{1,a,(1,2)} 性质&#xff1a;不重复性&#xff0c;集合中每个元素不会有重复&#xff1b;集合中必须是不可变元素&#xff0c;不能有列表可以有元组 创建&#xff1a;{}或…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略

AXI Lite协议详解

AXI Lite协议详解 axi&#xff08;Advanced eXtensible Interface&#xff09;是一种总线协议&#xff0c;该协议是ARM公司提出的amba&#xff08;Advanced Microcontroller Bus Architecture&#xff09;3.0协议中最重要的部分&#xff0c;是一种面向高性能、高带宽、低延迟的…

【MySQL基础】MySQL基础操作三

文章目录 &#x1f349;1.联合查询&#x1f95d;笛卡尔积 &#x1f349;2.内连接&#x1f95d;查询单个数据&#x1f95d;查询多个数据 &#x1f349;3.外连接&#x1f349;4.自连接&#x1f349;5.合并查询 &#x1f349;1.联合查询 &#x1f95d;笛卡尔积 实际开发中往往数…

vite ts vue 项目提示 . Projects must list all files or use an include pattern.

vite ts vue 项目提示 . Projects must list all files or use an include pattern. 在引用一个 ts 的时候&#xff0c;提示如下&#xff1a; 需要在 tsconfig.node.json 文件中添加&#xff1a; {"compilerOptions": {"composite": true,"skipLibC…

wait/notify/notifyAll 方法的使用注意事项

wait/notify/notifyAll 方法的使用注意事项 wait/notify/notifyAll 方法的使用注意事项 wait/notify/notifyAll 方法的使用注意事项为什么 wait 必须在 synchronized 保护的同步代码中使用&#xff1f;为什么 wait/notify/notifyAll 被定义在 Object 类中&#xff0c;而 sleep …

vue3项目

案例用到的知识点如下&#xff1a; ① vite 创建项目 ② 组件的封装与注册 ③ props ④ 样式绑定 ⑤ 计算属性 ⑥ 自定义事件 ⑦ 组件上的 v-model 效果如下图&#xff1b; 页面2 项目结构&#xff1a; 初始化项目 在终端运行以下的命令&#xff0c;初始化 vite 项目&#xf…

AI论文速读 | TPLLM:基于预训练语言模型的交通预测框架

论文标题&#xff1a;TPLLM: A Traffic Prediction Framework Based on Pretrained Large Language Models 作者&#xff1a;Yilong Ren&#xff08;任毅龙&#xff09;, Yue Chen, Shuai Liu, Boyue Wang&#xff08;王博岳&#xff09;,Haiyang Yu&#xff08;于海洋&#x…

苹果电脑下载crossover对电脑有影响吗 crossover mac 好用吗CrossOver虚拟机 CrossOver打游戏

苹果电脑下载crossover对电脑有影响吗&#xff1f; 在苹果电脑下载安装crossover对电脑没有什么影响&#xff0c;并且可以解决macOS系统不能安装Windows应用程序的问题。相较于虚拟机和双系统而言&#xff0c;crossover安装软件更简单&#xff0c;占用内存也更小。下面我们来看…

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

肝了三天,完成了AIGC工具网站大全,建议收藏再看

说是肝了三天&#xff0c;其实远远不止&#xff0c;前前后后&#xff0c;从资料搜集到最后整理成文&#xff0c;有近一个月了&#xff0c;大家看在整理不易的份上&#xff0c;给点个赞吧&#xff0c;不要光顾着收藏呀&#xff01; 国内网站 AIGC 导航 https://www.aigc.cn 网…

组播协议详解

1.组播基础 &#xff08;1&#xff09;组播简介 &#xff08;2&#xff09;组播的地址 &#xff08;3&#xff09;组播的MAC地址 &#xff08;4&#xff09;组播的MAC地址 &#xff08;5&#xff09;反向转发路径—RPF 2.IGMP &#xff08;1&#xff09;简介 &#xff0…