题目
思路参考《算法小抄》
滑动窗口典型题目!!!
Python
参考:灵茶山艾府
答案解析:https://leetcode.cn/problems/minimum-window-substring/solutions/2713911/liang-chong-fang-fa-cong-o52mn-dao-omnfu-3ezz/?envType=study-plan-v2&envId=top-100-liked
写法1

class Solution:
def minWindow(self, s: str, t: str) -> str:
s_dict = Counter()
t_dict = Counter(t)
start, end = -1, len(s)
left = 0
for right, c in enumerate(s):
s_dict[c] += 1
while s_dict >= t_dict:
if right - left < end - start:
start, end = left, right
s_dict[s[left]] -= 1
left += 1
return s[start: end+1] if start != -1 else ""
写法2
这版代码结合《算法小抄》更容易理解!!!
class Solution:
def minWindow(self, s: str, t: str) -> str:
window, need = [0] * 256, [0] * 256
for c in t:
need[ord(c)] += 1
l, r, valid = 0, 0, 0
start_idx, min_len = -1, len(s) + 1
t_set = set(list(t))
for r in range(len(s)):
new_char = s[r]
r += 1
if new_char in t_set:
window[ord(new_char)] += 1
if window[ord(new_char)] == need[ord(new_char)]:
valid += 1
while valid == len(t_set):
if r - l < min_len:
min_len = r - l
start_idx = l
del_char = s[l]
l += 1
if window[ord(del_char)] > 0:

该博客围绕滑动窗口解决最小覆盖子串问题展开。提供了Python和Java两种语言的解法,Python有两种写法,Java有使用数组代替Map和使用HashMap两种方法。还特别提醒在Java中Integer比较要用equals,不要用“==”。
最低0.47元/天 解锁文章
863

被折叠的 条评论
为什么被折叠?



