class Solution:
def minWindow(self, s: str, t: str) -> str:
if s==t:
return s
right = 0
left = 0
start = 0
win_max = float('inf')
dic = defaultdict(int)
for char in t:
dic[char]+=1
def help(dic):
for v in dic.values():
if v>0:
return False
return True
while right<len(s):
if s[right] in dic:
dic[s[right]]-=1
right+=1
#检查是不是t的字符串已经被全部覆盖了
while help(dic):
#更新窗口的最大值和左边界
if right-left<win_max:
win_max = right-left
start = left
#缩小窗口,也就是减小左边界。
#如果左边的值在字典中,就给它加1,然后向右移动左指针即可
#如果不在字典中直接移动左指针就好
if s[left] in dic:
dic[s[left]]+=1
left+=1
#如果窗口的最大值是小于等于字符串s
#返回当前覆盖的最小字符串
if win_max<=len(s):
return s[start:start+win_max]
return ''
总结:处理字符串大多时候需要双指针,覆盖字符串的题目中可以使用hash表去存储目标字符串的字符。