
Leetcode 76 最小覆盖子串 java版
初始化窗口:使用滑动窗口的方法,首先由右指针逐渐扩展窗口,直到窗口包含 收缩窗口:一旦窗口包含所有必要字符,开始用左指针逐步收缩窗口,使其尽量小,同时仍然包含 记录最小窗口:在收缩过程中,记录每次满足条件的窗口的位置和长度,找到最小的一个。 维护计数器:使用一个 初始化计数器:对于 扩展窗口:从右指针开始,逐个字符加入窗口。对于每个字符,检查是否包含在 收缩窗口:当窗口满足包含所有 记录最小窗口:在每一次有效收缩后,记录当前窗口的位置和长度,如果比之前记录的小,则更新。 返回结果:如果找到了满足条件的窗口,返回对应的子串;否则返回空字符串。
发布日期:2025-04-05 00:20:18
浏览次数:11
分类:精选文章
本文共 1980 字,大约阅读时间需要 6 分钟。
为了解决找出字符串 s
中涵盖字符串 t
所有字符的最小子串的问题,我们可以使用滑动窗口技术。该方法通过调整窗口的左右指针来找到最短的包含 t
所有字符的子串。
方法思路
t
的所有字符。t
的所有字符。HashMap
来记录当前窗口中每个字符的数量,确保窗口中每个字符的数量满足 t
中的最低要求。解决代码
public class Solution { public static String minWindow(String s, String t) { MapcharCountT = new HashMap<>(); Map window = new HashMap<>(); for (int i = 0; i < t.length(); i++) { char c = t.charAt(i); charCountT.put(c, charCountT.getOrDefault(c, 0) + 1); } int minStart = Integer.MAX_VALUE; int minEnd = Integer.MAX_VALUE; int left = 0; int right = 0; for (right = 0; right < s.length(); right++) { char c = s.charAt(right); if (window.containsKey(c)) { window.put(c, window.get(c) + 1); } else { window.put(c, 1); } while (true) { char current = s.charAt(left); if (window.get(current) < charCountT.getOrDefault(current, 0)) { break; } left++; } if (left > right) { break; } if (right - left + 1 < (minEnd - minStart + 1)) { minStart = left; minEnd = right; } char currentChar = s.charAt(left); window.put(currentChar, window.getOrDefault(currentChar, 0) + 1); left++; } if (minStart == Integer.MAX_VALUE) { return ""; } return s.substring(minStart, minEnd + 1); }}
代码解释
t
中的每个字符,记录其出现的次数。t
中,并更新计数器。t
的字符时,开始收缩左指针。一旦某个字符计数低于 t
中的要求,停止收缩。通过这种方法,我们可以高效地找到符合条件的最小子串,确保时间复杂度为 O(n),其中 n 是 s
的长度。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月22日 03时39分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 架构组件 – 让天下没有难做的 App
2021-05-16
能解决数据可视化大屏需求的3款可视化工具
2021-05-16
第01问:MySQL 一次 insert 刷几次盘?
2021-05-16
laravel server error 服务器内部错误
2021-05-18
一道简单的访问越界、栈溢出pwn解题记录
2021-05-18
响应的HTTP协议格式+常见的响应码
2021-05-18
springboot redis key乱码
2021-05-19
解决打开 json 文件中文乱码的问题
2025-03-28
计算机网络基础:PKI(公钥基础设施)
2025-03-28
乒乓球问题
2025-03-28
回溯法介绍
2025-03-28
有了Trae,人人都是程序员的时代来了
2025-03-28
CentOS 系列:CentOS 7文件系统的组成
2025-03-28
Docker部署postgresql-11以及主从配置
2025-03-28
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2025-03-28
kali安装docker(亲测有效)
2025-03-28