当前位置: 首页 > news >正文

Leetcode76覆盖最小子串

覆盖最小子串

  • 代码来自b站左程云
class Solution {public String minWindow(String str, String tar) {char[] s = str.toCharArray();char[] t = tar.toCharArray();int[] cnt = new int[256];for (char cha : t) { cnt[cha]--;}int len = Integer.MAX_VALUE;int debt = t.length;int start = 0;for (int r = 0, l = 0; r < s.length; r ++) { if (cnt[s[r]]++ < 0) { debt--;}if (debt == 0) { while (cnt[s[l]] > 0) { cnt[s[l++]]--;}if (r - l + 1 < len) { len = r - l + 1;start = l;}}}return len == Integer.MAX_VALUE ? "" : str.substring(start, start + len);}
}

画图理解题意

  • 我们先梳理一下思路:
  1. 我们要确定这个窗口有没有包含target字符串中的每一个字符,难道我们要遍历比较吗?显然不行,那么怎么样让它遍历一次就知道是否包含呢?
  2. 我们利用之前前缀和中哈希表的思路,我们把target字符串的每个字符出现的次数作为每个字符欠债的个数存到数组中,把它弄成一个前债表。
  • 我们看第一个样例:
    在这里插入图片描述

初始的欠债表为:

说明此时我们要找到一个满足ABC每个字符各一个的组合。


当我们不断扩展右边界,会发现第一次满足条件的窗口是这样的:

在这里插入图片描述
可是题目要我们求最短啊,我们尝试收缩左边界,收缩的时候要注意,如果收缩会导致欠债那么就不能收缩,只能记住答案,拿去与之前比大小看是否能更新。

然后继续扩展右边界:
在这里插入图片描述

此时我们发现,不仅不欠债还有了结余可以尝试收缩。

继续这样推下去,就是不断进行这个判断过程:
在这里插入图片描述

理解代码:

    if (cnt[s[r]]++ < 0) { debt--;}

这里是把每一个字符扔到欠债表里面进行结算,如果是target里面的,说明他刚开始是负的,所以我们用是否小于0来判断是否可以对欠债总数debt来进行削减,到0的时候就说明我们要开始尝试收缩窗口了。

          if (debt == 0) { while (cnt[s[l]] > 0) { cnt[s[l++]]--;}if (r - l + 1 < len) { len = r - l + 1;start = l;}}

要判断左边是否可以削减,就要看它的削减会不会导致债务的增加,也就是会不会导致现在的窗口不能完全包含target,所以进行此判断。

然后我们就要看这个窗口长度是不是目前最短的,是的话就更新它,同时记住此时左边界,为什么?因为我们要返回的是一个字符串,截取一个子串需要它的长度和起始位置。

相关文章:

  • 五月份嵌入式面试总结
  • 锐捷交换机STP环路日志信息解读
  • ODB 的安装及使用
  • 前端实现流式输出《后端返回Markdown格式文本,前端输出类似于打字的那种》
  • Systemd基础
  • qtc++ qdebug日志生成
  • 【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
  • 项目QT+ffmpeg+rtsp(一)——Qt的安装和rtsp的测试
  • python中集合的操作
  • Python 中的 typing.ClassVar 详解
  • 会议分享|高超声速流动测量技术研讨会精彩探析
  • windows下authas调试tomcat
  • 青少年ctf平台应急响应-应急响应1
  • 基于 nvitop+Prometheus+Grafana 的物理资源与 VLLM 引擎服务监控方案
  • 自学嵌入式 day19-数据结构 链表
  • 二水平设计的单次重复
  • 阳台光伏+储能:安科瑞智能计量仪表来助力
  • 学习海康VisionMaster之直方图工具
  • uniapp+vue3页面滚动加载数据
  • 现代计算机图形学Games101入门笔记(十四)
  • 首次公布!我国空间站内发现微生物新物种
  • 贵州省委军民融合发展委员会办公室副主任李刚接受审查调查
  • 李峰已任上海青浦区委常委
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 商务部:长和集团出售港口交易各方不得规避审查
  • 上海制造佳品汇大阪站即将启幕,泡泡玛特领潮出海