给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC"
说明:
- 如果 S 中不存这样的子串,则返回空字符串
""
。 - 如果 S 中存在这样的子串,我们保证它是唯一的答案。
class Solution:
def minWindow(self, s: str, t: str) -> str:
from collections import Counter
dict_t = Counter(t)
dict_window = {}
left, right = 0, 0
minlength = float('inf')
res = ''
while right < len(s):
if s[right] not in dict_window:
dict_window[s[right]] = 0
dict_window[s[right]] += 1
while self.contains(dict_window, dict_t):
if right - left + 1 < minlength:
minlength = right - left + 1
res = s[left:right+1]
dict_window[s[left]] -= 1
left += 1
right += 1
return res
def contains(self, dict_window, dict_t):
for t in dict_t:
if t not in dict_window:
return False
if dict_t[t] > dict_window[t]:
return False
return True