題目描述:
解決思路:滑動窗口
代碼實現如下:
class Solution(object):
def minWindow(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
dict_t = collections.Counter(t) #對t中的字母計數
required = len(dict_t) #獲得dict_t的長度
l, r = 0, 0 #初始化窗口
formed = 0 #用來追蹤在當前窗口中出現的t中的字母的個數(重複的字母只計數一次)
window_counts = {} #
ans = float("inf"), None, None
while r < len(s):
#從右邊開始增加字母到窗口
character = s[r]
window_counts[character] = window_counts.get(character, 0) + 1
#判斷該字母是否滿足題目要求
if character in dict_t and window_counts[character] == dict_t[character]:
formed += 1
while l <= r and formed == required:
character = s[l]
#對當前最小的窗口大小進行保存
if r - l + 1 < ans[0]:
ans = (r -l + 1, l , r)
#窗口左指針右移
window_counts[character] -= 1
if character in dict_t and window_counts[character] < dict_t[character]:
formed -= 1
l += 1
r += 1
return "" if ans[0] == float("inf") else s[ans[1] : ans[2] + 1]
提交結果: