76. 最小覆盖子串
解法一:滑动窗口
class Solution:
def minWindow(self, s: str, t: str) -> str:
# 先统计词频,t中的字符词频大于0,在s中不在t中的等于0
map = dict()
for c in t:
if c in map:
map[c] += 1
else:
map[c] = 1
for c in s:
if c not in map:
map[c] = 0
count = 0 #表示匹配情况
begin, end = 0, 0
d = sys.maxsize #记录窗口最小值
head = 0 #记录最小窗口起始
while end < len(s):
if map[s[end]] > 0: #只有遇到需要的字符(词频大于0的),count才计数
count += 1
map[s[end]] -= 1 #当前字符词频减1
end += 1
while count == len(t): #若匹配,begin前移
if end - begin < d: #找到更小的窗口
d = end - begin
head = begin
if map[s[begin]] == 0: #若移动处是需要的字符,修改count
count -= 1
map[s[begin]] += 1
begin += 1
if d == sys.maxsize: #若找不到
return ""
else:
return s[head:head+d]解法二:滑动窗口模板
最后更新于