https://leetcode.cn/problems/minimum-window-substring/
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
示例 1:
输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
示例 2:
输入:s = “a”, t = “a”
输出:“a”
class Solution:
def minWindow(self, s: str, t: str) -> str:
# 字符串、哈希表、滑动窗口
# window 不定宽
if len(s) < len(t):
return ''
from collections import Counter, defaultdict
need = Counter(t)
window = defaultdict(int)
left, right, start, valid, minlen = 0, 0, 0, 0, float('inf')
while right < len(s):
c = s[right]
right += 1
window[c] += 1
if window[c] == need[c]:
valid += 1
while len(need) == valid:
if right - left < minlen:
minlen = right - left
start = left
d = s[left]
left += 1
if window[d] == need[d]:
valid -= 1
window[d] -= 1
if minlen == float('inf'):
return ''
else:
return s[start: start + minlen]