76. 最小覆盖子串
-
解题思路:以
i
开头,最小覆盖子串是什么,然后求出所有的结果,最小的便是。先求出i
的结果,是[i, j]
,然后求i+1
时,直接从j
后遍历即可。- 窗口的思想,窗口在
[i, j]
,然后来到i+1
,先把i
弹出去,弹出去的前提是,s[i]
是我们需要的字符。然后再看[i + 1, j]
是否满足,如果不满足,右边界再继续扩。
- 窗口的思想,窗口在
-
代码
class Solution: def minWindow(self, s: str, t: str) -> str: ans_begin = -1 ans_end = -1 ans_len = 1e+10 char_count = {} # 需要的字符 need = 0 for ch in t: if ch in char_count: char_count[ch] += 1 else: char_count[ch] = 1 need += 1 j = 0 for i in range(0, len(s), 1): # 先把i - 1弹出去 if i > 0 and s[i - 1] in char_count: char_count[s[i - 1]] += 1 if char_count[s[i - 1]] == 1 : need += 1 while j < len(s) and need > 0: if s[j] in char_count: char_count[s[j]] -=1 if char_count[s[j]] == 0: need -=1 j += 1 # [i, j) 满足了条件 if need == 0 and j - i < ans_len: ans_len = j - i ans_begin = i ans_end = j - 1 return s[ans_begin : ans_end + 1]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理