力扣LeetCode #76最小覆盖子串(MinWindow)

这篇博客介绍了如何利用滑动窗口算法解决LeetCode中的第76题,即找到一个最小子串,涵盖目标字符串t的所有字符。博主通过示例解释了题目要求,并详细阐述了滑动窗口法的思路,包括处理目标字符串,记录窗口边界,以及检查窗口是否满足条件的过程。最后,提供了JAVA实现代码。
摘要由CSDN通过智能技术生成

- 题目描述

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。

提示:
1 <= s.length, t.length <= 105
s 和 t 由英文字母组成

进阶:你能设计一个在 o(n) 时间内解决此问题的算法吗?

来源:LeetCode

- 示例

  • 示例 1:
    输入:s = “ADOBECODEBANC”, t = “ABC”
    输出:“BANC”
  • 示例 2:
    输入:s = “a”, t = “a”
    输出:“a”

- 思路分析

  • 直接暴力求解不太现实,如果字符串很长的话,效率会非常低。因为要找的是一个符合条件的子串,可以想到会用滑动窗口法:即找到一个长度最小的窗口,包含目标字符串中的所有字符。滑动窗口法有两种情况:①窗口大小固定;②窗口大小不固定。此处即第二种。
  • 在寻找窗口之前,我们先处理一下目标字符串 t t t。因为窗口需要满足目标字符串的长度和对应字符的个数,我们将 t t t < C h a r a c t e r − I n t e g e r > <Character-Integer> <CharacterInteger>的形式保存在字典里,记录每个字符以及对应个数。保存 l e n t len_t lent,表示字符串 t t t的长度,用来监控窗口中的符合要求的字符总长度是否已经达到了字符串 t t t的长度。
  • 在找窗口的过程中,我们记录两个值: s t a r t start start e n d end end s t a r t start start记录窗口的左边界, e n d end end记录窗口的右边界,窗口的内容即为 [ s t a r t , e n d ) [start, end) [start,end)。从 0 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值