class Solution:
def minWindow(self, s: str, t: str) -> str:
# hash table to store the required char frequency
need = collections.Counter(t)
# total character count we need to care about
missing = len(t)
# windowStart and windowEnd to be
windowStart, windowEnd = 0, 0
i = 0
# iterate over s starting over index 1
for j, char in enumerate(s, 1):
# if char is required then decrease missing
if need[char] > 0:
missing -= 1
# decrease the freq of char from need (maybe be negative - which basically denotes
# that we have few extra characters which are not required but present in between current window)
need[char] -= 1
# we found a valid window
if missing == 0:
# chars from start to find the real windowStart
while i < j and need[s[i]] < 0:
need[s[i]] += 1
i += 1
# if it's only one char case or curr window is smaller, then update window
if windowEnd == 0 or j-i < windowEnd-windowStart:
windowStart, windowEnd = i, j
# now resetting the window to make it invalid
# sure the first appearing char satisfies need[char]>0
need[s[i]] += 1
# missed this first char, so add missing by 1
missing += 1
#update i to windowStart+1 for next window
i += 1
return s[windowStart:windowEnd]
运行结果:
速度:48.61%
内存:37.84%