Minimum Window Subsequence

LeetCode 727

"""
find a min substring that contains all unique chars
"""
from collections import Counter

"""
Counter特性
1. 存取時, 若 key 為空時將返回 0 而非 error
2. 蒐集 list 中各項元素還有元素出現的次數

演算法分析:
1. 指標 j, 從字串左往右掃, 一直到滿足子字串為止, 並同時維持各個字母的所需數量(可以負數)
2. 找到後再給另一指標 i, 由左往右掃到 j, 並同時維持各個字母的所需數量 
3. 把 i, j 給 I, J, 為回應當前最短長度
"""
def minWindow(s, p):
    missing = len(p)
    memo = Counter(p)
    I = J = i = j = 0
    
    for j, c in enumerate(s):
        if memo[c] > 0:
            missing = missing - 1
        memo[c] = memo[c] - 1
        
        if missing == 0:
            if J == 0:
                I, J = i, j
            while i <= j and memo[s[i]] < 0:
                memo[s[i]] = memo[s[i]] + 1
                i = i + 1
            if j - i <= J - I:
                I, J = i, j
    return s[I:J+1]

"""
S = "ADOBECODEBANC"
T = "ABC"
"""
s = 'ADOBECODEBANC'
p = set(s)
print("Given String: {}".format(s))
print("pattern: {}".format("".join(p)))
print(minWindow(s,p))

Last updated