题目描述
https://leetcode-cn.com/problems/minimum-window-substring/
思路题解
https://leetcode-cn.com/problems/minimum-window-substring/solution/tong-su-qie-xiang-xi-de-miao-shu-hua-dong-chuang-k/
注意collections.defaultdict
的使用
class Solution:
def minWindow(self, s: str, t: str) -> str:
need=collections.defaultdict(int)
for c in t:
need[c]+=1
needCnt=len(t)
i=0
res=(0,float('inf'))
for j,c in enumerate(s):
if need[c]>0:
needCnt-=1
need[c]-=1
#defaultdict(<class 'int'>, {'A': 0, 'B': 0, 'C': 0, 'D': -1, 'O': -1, 'E': -1})
if needCnt==0: #步骤一:滑动窗口包含了所有T元素
while need[s[i]]!=0: #步骤二:增加i,排除多余元素
need[s[i]]+=1
i+=1
if j-i<res[1]-res[0]: #记录结果
res=(i,j)
need[s[i]]+=1 #步骤三:i增加一个位置,寻找新的满足条件滑动窗口
needCnt+=1
i+=1
return '' if res[1]>len(s) else s[res[0]:res[1]+1] #如果res始终没被更新过,代表无满足条件的结果