76. Minimum Window Substring
Hard
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
Example:
Input: S = "ADOBECODEBANC", T = "ABC" Output: "BANC"
Note:
""
.
笔记:
参考Grandyang
窗口的移动,先向右扩展,然后收缩左边界。c++中array['a']==array[13]可以使用,‘a’代表了a对应的ASCII码,所以在c++中可以使用数组来替代ASCII码,在python中,则不行。array['a']就是dict,其实也就是hash, array['a'] != array[13]。
class Solution(object):
def minWindow(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
t_hash = {}
for v in t:
if v in t_hash:
t_hash[v] += 1
else:
t_hash[v] = 1
cnt, left, min_len, res, = 0, 0, float('inf'), ""
for S_index, S in enumerate(s):
if S in t_hash:
t_hash[S] -= 1
if t_hash[S] >=0 :
cnt += 1
while cnt == len(t):
if S_index-left+1 < min_len:
min_len = S_index - left + 1
res = s[left:S_index+1]
if s[left] in t_hash:
t_hash[s[left]] += 1
if t_hash[s[left]] > 0:
cnt -= 1
left += 1
return res