76. 最小覆盖子串
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。
示例:
输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”
说明:
如果 S 中不存这样的子串,则返回空字符串 “”。
如果 S 中存在这样的子串,我们保证它是唯一的答案。
滑动窗口
class Solution(object):
def minWindow(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
hashmap = collections.defaultdict(int)
for i in range(len(t)):
hashmap[t[i]]+=1
i = 0
res = (0,len(s))
distance = len(t)
for j,v in enumerate(s):
if hashmap[v] >0:
distance -=1
hashmap[v] -=1
if distance == 0:
while True:
if hashmap[s[i]] == 0:
break
hashmap[s[i]]+=1
i+=1
if j-i<res[1]-res[0]:
res = (i,j)
hashmap[s[i]]+=1
i+=1
distance+=1
return '' if res[1]==len(s) else s[res[0]:res[1]+1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-window-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。