【LeetCode笔记】76. 最小覆盖子串(字符串、滑动窗口)
文章目录
- 题目描述
- 思路 && 代码
- 二刷
最近一直在充电基础知识、维护 leetcode 总结博客
今天继续摸一摸新题目吧~
题目描述
- 感觉和 03. 无重复的最长子串 有点像,都是在字符串上用滑动窗口来找子串。
- 并且都是属于那种,解决一次以后,思路都十分清晰的类型。
思路 && 代码
- 步骤:参考了mcdull的这篇题解
- 注意点:需要维护的变量很多(need、left、right、count、minSize、startIndex),要保证正确维护。
- need[128] :存储当前滑动窗口,对每个字符还需要的数量。为0则正好,负数则说明冗余,正数则还需要。
- 时间复杂度:O(n),也就是最多 right 跑一遍,left 跑一遍
class Solution {// 思路:滑动窗口 + 双指针。正确维护几个变量十分重要// 复杂度:最多为O(2 * n) = O(n)public String minWindow(String s, String t) {if(s == null || t == null || s.length() == 0 || t.length() == 0) {return "";}// need:总是记录当前窗口,每个字符还需的数量。负数为冗余数量int[] need = new int[128];for(char c : t.toCharArray()) {need[c]++;}int count = t.length(), startIndex = 0, minSize = Integer.MAX_VALUE;for(int l = 0, r = 0; r < s.length(); r++) {if(need[s.charAt(r)] > 0) {count--;}need[s.charAt(r)]--;if(count == 0) {// 去掉窗口前段的冗余元素,更新 leftwhile(l < r && need[s.charAt(l)] < 0) {need[s.charAt(l)]++;l++;}// 维护 minSizeif(r - l + 1 < minSize) {minSize = r - l + 1;startIndex = l;}// 继续下一轮的窗口对比need[s.charAt(l)]++;l++;count++;}}return minSize == Integer.MAX_VALUE ? "" : s.substring(startIndex, startIndex + minSize);}
}
二刷
- 实打实的滑动窗口维护!
- 总的来说还是几个变量的维护,直接看代码和注释吧~
class Solution {public String minWindow(String s, String t) {// 记录字符需要的数量,负数冗余int[] need = new int[128];for(char c : t.toCharArray()) {need[c]++;}int counts = t.length(), startIndex = 0, minSize = Integer.MAX_VALUE;for(int l = 0, r = 0; r < s.length(); r++) {// Part 1: 更新 counts && needif(need[s.charAt(r)] > 0) {counts--;}need[s.charAt(r)]--;// Part 2: 此时满足的情况,更新窗口if(counts == 0) {// Part 2.1:去除前面的冗余字符while(l < r && need[s.charAt(l)] < 0) {need[s.charAt(l)]++;l++;}// Part 2.2:维护 minSizeif(r - l + 1 < minSize) {startIndex = l;minSize = r - l + 1;}// Part 2.3:进行下一轮维护need[s.charAt(l++)]++;counts++;}}return minSize == Integer.MAX_VALUE ? "" : s.substring(startIndex, startIndex + minSize);}
}
【LeetCode笔记】76. 最小覆盖子串(字符串、滑动窗口)相关推荐
- 【LeetCode】【HOT】76. 最小覆盖子串(滑动窗口)
[LeetCode][HOT]76. 最小覆盖子串 文章目录 [LeetCode][HOT]76. 最小覆盖子串 package hot;public class Solution76 {public ...
- LeetCode 76. 最小覆盖子串(滑动窗口)
1. 题目 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = &quo ...
- 76. 最小覆盖子串(滑动窗口)
给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: 对于 t 中重复字符 ...
- 【LeetCode】76. 最小覆盖子串 (Java代码)
[LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...
- 最小覆盖子串_滑动窗口
解题思路 class Solution {public:string minWindow(string s, string t) {vector<int> need(128,0);//用n ...
- LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)
LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...
- LeetCode - 76 最小覆盖子串
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 76. 最小覆盖子串 - 力扣(LeetCode) 题目描述 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符 ...
- LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波
LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...
- Leetcode 76最小覆盖子串77组合78子集
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...
- 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列
72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...
最新文章
- c语言图形界面设定,「分享」C语言如何编写图形界面
- accesskey 提交
- 网络编程学习笔记(recvmsg和sendmsg函数)
- 在.Net项目中使用Redis作为缓存服务
- 刚公布完价格就被骂?这款新机有点惨...
- git bash here创建项目无法选择m_版本控制Git基础及使用详解
- Windows下电脑硬盘的日常维护
- 创造or变革:卡萨帝为何能重塑高端品质生活?
- 浪潮gs设置连接服务器信息,浪潮GS系统客户端设置方案
- 批量下载哔哩哔哩视频的工具
- last_load_time和last_active_time的选择
- GCC Manual
- ffmpeg 自定义IO与Seek
- 计算机快速格式化u盘启动,制作启动盘格式化u盘
- Android锁屏状态下信息的显示
- Docker中Swarm集群部署
- Sign in with Apple(苹果授权登陆) java jwt方式验证
- Css margin和pandding的上下左右
- 为什么算法岗薪酬普遍偏高,是真的缺人才吗?
- SpringBoot学习笔记(完整)
热门文章
- jsp内置对象--session
- 不用math type解决word公式上浮问题
- 计算机应用基础王秀娟,计算机应用基础课教学内容设计分析.doc
- 微信小程序js数组初始化_微信小程序学习Course 3-2 JS数组对象学习
- linux清除configure文件_在Linux操作系统下自动生成Makefile的方法
- 掌控谈话~让对方说“不”
- oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...
- java classpath设置_Java CLASSPATH设置
- S3C2440 lds链接脚本解析
- OpenJTAG调试S3C2440裸板程序