[Leedcode][JAVA][第76题][最小覆盖子串]滑动窗口]

【问题描述】[第76题][最小覆盖子串][中等]

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。

【解答思路】

1. 滑动窗口 map

时间复杂度:O(N^2) 空间复杂度:O(1)

class Solution {public String minWindow(String s, String t) {if (s == null || t == null || s.length() == 0 || t.length() == 0) return "";// 定义一个数字,用来记录字符串 t 中出现字符的频率,也就是窗口内需要匹配的字符和相应的频率int[] map = new int[128];for (char c : t.toCharArray()) {map[c]++;}int left = 0, right = 0;int match = 0;  // 匹配字符的个数int minLen = s.length() + 1;   // 最大的子串的长度// 子串的起始位置 子串结束的位置(如果不存在这样的子串的话,start,end 都是 0,s.substring 截取就是 “”int start = 0, end = 0;while (right < s.length()){char charRight = s.charAt(right); // 右边界的那个字符map[charRight]--;   // 可以理解为需要匹配的字符 charRight 减少了一个// 如果字符 charRight 在 t 中存在,那么经过这一次操作,只要个数大于等于 0,说明匹配了一个// 若字符 charRight 不在 t 中,那么 map[charRight] < 0, 不进行任何操作if (map[charRight] >= 0) match++;right++;  // 右边界右移,这样下面就变成了 [),方便计算窗口大小// 只要窗口内匹配的字符达到了要求,右边界固定,左边界收缩while (match == t.length()){int size = right - left;if (size < minLen){minLen = size;start = left;end = right;}char charLeft = s.charAt(left);  // 左边的那个字符map[charLeft]++;  // 左边的字符要移出窗口// 不在 t 中出现的字符,移出窗口,最终能够达到的最大值 map[charLeft] = 0// 如果恰好移出了需要匹配的一个字符,那么这里 map[charLeft] > 0, 也就是还要匹配字符 charLeft,此时 match--if (map[charLeft] > 0) match--;left++;  // 左边界收缩}}return s.substring(start, end);}
}
2. 互动窗口 汉明距离

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)

在这里插入图片描述
在这里插入图片描述

【总结】

1.滑动窗口算法模板
/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {unordered_map<char, int> need, window;for (char c : t) need[c]++;int left = 0, right = 0;int valid = 0; while (right < s.size()) {// c 是将移入窗口的字符char c = s[right];// 右移窗口right++;// 进行窗口内数据的一系列更新.../*** debug 输出的位置 ***/printf("window: [%d, %d)\n", left, right);/********************/// 判断左侧窗口是否要收缩while (window needs shrink) {// d 是将移出窗口的字符char d = s[left];// 左移窗口left++;// 进行窗口内数据的一系列更新...}}
}
2.滑动窗口 end指针向右移动, start向左移动 细节多多
3.细节
// 分类·
int[] map = new int[128];for (char c : t.toCharArray()) {map[c]++;}

转载https://leetcode-cn.com/problems/minimum-window-substring/solution/java-yi-ge-shu-zu-ji-lu-pin-shu-de-hua-dong-chuang/

参考链接:https://leetcode-cn.com/problems/minimum-window-substring/solution/hua-dong-chuang-kou-suan-fa-tong-yong-si-xiang-by-/

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

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

相关文章

计算机应用综合实践实验心得,综合实践活动培训心得体会范文(精选5篇)

综合实践活动培训心得体会范文(精选5篇)在平日里&#xff0c;心中难免会有一些新的想法&#xff0c;有这样的时机&#xff0c;要好好记录下来&#xff0c;这样能够让人头脑更加清醒&#xff0c;目标更加明确。怎样写好心得体会呢&#xff1f;下面是小编为大家整理的综合实践活动…

天梯赛-是否完全二叉搜索树

将一系列给定数字顺序插入一个初始为空的二叉搜索树&#xff08;定义为左子树键值大&#xff0c;右子树键值小&#xff09;&#xff0c;你需要判断最后的树是否一棵完全二叉树&#xff0c;并且给出其层序遍历的结果。 输入格式&#xff1a; 输入第一行给出一个不超过20的正整数…

html:(4):认识html文件基本结构和认识head标签

认识html文件基本结构 这一节中我们来学习html文件的结构&#xff1a;一个HTML文件是有自己固定的结构的。 <html><head>...</head><body>...</body> </html> 代码讲解&#xff1a; 1. <html></html>称为根标签&#xff0…

python编程习惯

1.使用局部变量 2.减少函数调用次数 3.采用映射替代条件查找 4.直接迭代序列元素 5.采用生成器表达式替代列表解析 6.先编译后调用 7.模块编程习惯转载于:https://www.cnblogs.com/chbo/p/10361863.html

[Leedcode][JAVA][第4题][寻找两个正序数组中的中位数][二分查找][双指针]

【问题描述】[困难] 给定两个大小为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出这两个正序数组的中位数&#xff0c;并且要求算法的时间复杂度为 O(log(m n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 [1, 3] nums2 [2]则…

html 常用字符,html 常用特殊字符

HTML常用特殊字符最常用的字符实体(Character Entities)空格<小于<<>大于>>&&符号&&"双引号""其他常用的字符实体(Character Entities)©版权©© 注册商标乘号除号 字符 十进制字符编号 实体名字! !---"…

html:(5):了解html的代码注释和语义化

了解HTML的代码注释 什么是代码注释&#xff1f;代码注释的作用是帮助程序员标注代码的用途&#xff0c;过一段时间后再看你所编写的代码&#xff0c;就能很快想起这段代码的用途。代码注释不仅方便程序员自己回忆起以前代码的用途&#xff0c;还可以帮助其他程序员很快的读懂…

天梯-红色警报

5-9 红色警报 (25分) 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序&#xff0c;当失去一个城市导致国家被分裂为多个无法连通的区域时&#xff0c;就发出红色警报。注意&#xff1a;若该国本来就不完全连通&#xff0c;是分裂的k个区域&#xff0c;而失…

1114D . Flood Fill

这道题还可以转化成最长回文串&#xff0c;实际的答案是 离散化后的数组最长回文串切成一半有几个数字&#xff0c;这些数字就是中间的数字需要对齐的对象&#xff0c;所以不用改变 #include <bits/stdc.h> using namespace std;const int maxN 5008;int n; int dp[maxN…

[Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]

【问题描述】[中等] 给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。输入: [1,3,4,2,2] 输出: 2说明&#xff1a…

华南师范大学计算机学院广东录取,华南师范大学2020年广东省各批次分专业录取分数统计(含位次)...

看来广东考生也对师范类院校比较青睐&#xff0c;为什么这么说呢&#xff1f;因为前段时间&#xff0c;小编写了两篇关于广东省内师范院校(韩山师范学院、岭南师范学院)的录取情况以后&#xff0c;陆续有考生咨询华南师范大学的录取情况&#xff0c;可见师范院校是比较受考生欢…

html:(6):body标签和p标签

<body>标签&#xff0c;网页上显示的内容放在这里 还记得body标签吗&#xff0c;在上一章节我们简单介绍过&#xff1a;在网页上要展示出来的页面内容一定要放在body标签中。如下图是一个新闻文章的网页。 在浏览器中的显示效果&#xff1a; <!DOCTYPE HTML> <h…

蓝桥杯-K好数

问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字&#xff0c;那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K 4&#xff0c;L 2的时候&#xff0c;所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大&#xff0c;请你输出…

2019/2/12 Python今日收获

Python day12——025&#xff0c;026字典&#xff1a;当索引不好用时 1.字典&#xff1a;python唯一的一个映射类型。用键值对存储数据&#xff0c;他的标志是大括号。一个键值组合叫一个项。键的类型既可以是字符串类型也可以是整形也可以是浮点型。 如&#xff1a;dict{1:one…

[Leedcode][JAVA][第974题][和可被K整除的子数组][前缀和][HashSet]

【问题描述】[中等] 给定一个整数数组 A&#xff0c;返回其中元素之和可被 K 整除的&#xff08;连续、非空&#xff09;子数组的数目。示例&#xff1a;输入&#xff1a;A [4,5,0,-2,-3,1], K 5 输出&#xff1a;7 解释&#xff1a; 有 7 个子数组满足其元素之和可被 K 5 …

html:(7):了解hx标签和加强语气

了解<hx>标签&#xff0c;为你的网页添加标题 文章的段落用<p>标签&#xff0c;那么文章的标题用什么标签呢&#xff1f;在本节我们将使用<hx>标签来制作文章的标题。 标题标签一共有6个&#xff0c;h1、h2、h3、h4、h5、h6分别为一级标题、二级标题、三级标…

HDOJ-1257 最少拦截系统

最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 39448 Accepted Submission(s): 15465 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺…

计算机科学1pdf,计算机科学导论1.pdf

1.(4 分) 计算机的性能指标主要是( )。A. 操作系统、磁盘容量、内存容量、主频B. 字长、运算速度、存储容量、软硬件配置C. 运算速度、显示器分辨率、打印机的配置D. 配置语言、操作系统、外部设备、运算速度纠错得分&#xff1a; 4知识点&#xff1a; 5.1 计算机硬件(三大子系…

html:(8):span标签和q标签

使用<span>标签为文字设置单独样式 这一小节讲解<span>标签&#xff0c;我们对<em>、<strong>、<span>这三个标签进行一下总结&#xff1a; 1. <em>和<strong>标签是为了强调一段话中的关键字时使用&#xff0c;它们的语义是强调。…

cs20_1-1

1. 基本特点 1.1 save computation(惰性运行) x 2 y 3 add_op tf.add(x, y) mul_op tf.multiply(x, y) useless tf.multiply(x, add_op) pow_op tf.pow(add_op, mul_op) with tf.Session() as sess:z sess.run(pow_op) 如上&#xff0c;因为sess.run(pow_op)不需要用到u…