文章目录

  • 题目描述
  • 思路 && 代码
    • 二刷

最近一直在充电基础知识、维护 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. 最小覆盖子串(字符串、滑动窗口)相关推荐

  1. 【LeetCode】【HOT】76. 最小覆盖子串(滑动窗口)

    [LeetCode][HOT]76. 最小覆盖子串 文章目录 [LeetCode][HOT]76. 最小覆盖子串 package hot;public class Solution76 {public ...

  2. LeetCode 76. 最小覆盖子串(滑动窗口)

    1. 题目 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = &quo ...

  3. 76. 最小覆盖子串(滑动窗口)

    给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: 对于 t 中重复字符 ...

  4. 【LeetCode】76. 最小覆盖子串 (Java代码)

    [LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...

  5. 最小覆盖子串_滑动窗口

    解题思路 class Solution {public:string minWindow(string s, string t) {vector<int> need(128,0);//用n ...

  6. LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)

    LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...

  7. LeetCode - 76 最小覆盖子串

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 76. 最小覆盖子串 - 力扣(LeetCode) 题目描述 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符 ...

  8. LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波

    LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...

  9. Leetcode 76最小覆盖子串77组合78子集

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

  10. 72.编辑距离105.前序中序遍历序列构造二叉树151.翻转字符串里的单词104.二叉树的最大深度76.最小覆盖子串110.平衡二叉树31.下一个排列

    72.编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 .你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符. ...

最新文章

  1. c语言图形界面设定,「分享」C语言如何编写图形界面
  2. accesskey 提交
  3. 网络编程学习笔记(recvmsg和sendmsg函数)
  4. 在.Net项目中使用Redis作为缓存服务
  5. 刚公布完价格就被骂?这款新机有点惨...
  6. git bash here创建项目无法选择m_版本控制Git基础及使用详解
  7. Windows下电脑硬盘的日常维护
  8. 创造or变革:卡萨帝为何能重塑高端品质生活?
  9. 浪潮gs设置连接服务器信息,浪潮GS系统客户端设置方案
  10. 批量下载哔哩哔哩视频的工具
  11. last_load_time和last_active_time的选择
  12. GCC Manual
  13. ffmpeg 自定义IO与Seek
  14. 计算机快速格式化u盘启动,制作启动盘格式化u盘
  15. Android锁屏状态下信息的显示
  16. Docker中Swarm集群部署
  17. Sign in with Apple(苹果授权登陆) java jwt方式验证
  18. Css margin和pandding的上下左右
  19. 为什么算法岗薪酬普遍偏高,是真的缺人才吗?
  20. SpringBoot学习笔记(完整)

热门文章

  1. jsp内置对象--session
  2. 不用math type解决word公式上浮问题
  3. 计算机应用基础王秀娟,计算机应用基础课教学内容设计分析.doc
  4. 微信小程序js数组初始化_微信小程序学习Course 3-2 JS数组对象学习
  5. linux清除configure文件_在Linux操作系统下自动生成Makefile的方法
  6. 掌控谈话~让对方说“不”
  7. oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...
  8. java classpath设置_Java CLASSPATH设置
  9. S3C2440 lds链接脚本解析
  10. OpenJTAG调试S3C2440裸板程序