#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param S string字符串
# @param T string字符串
# @return string字符串
#
class Solution:
def minWindow(self , S: str, T: str) -> str:
# write code here
if not S or not T:
return ""
count_t = {}
for char in T:
count_t[char] = count_t.get(char,0)+1
count_s = {}
l,r = 0,0
min_length = float("inf")
min_start = 0
formed = 0
while r < len(S):
char = S[r]
count_s[char] = count_s.get(char,0)+1
if char in count_t and count_t[char] == count_s[char]:
formed += 1
while l <= r and formed == len(count_t):
char = S[l]
if r -l +1 < min_length:
min_length = r-l+1
min_start = l
count_s[char] -= 1
if char in count_t and count_s[char] < count_t[char]:
formed -=1
l += 1
r += 1
if min_length == float("inf"):
return ""
else:
return S[min_start:min_start+min_length]