• leetcode76 Minimum Window Substring


     1 """
     2 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).
     3 Example:
     4 Input: S = "ADOBECODEBANC", T = "ABC"
     5 Output: "BANC"
     6 """
     7 """
     8 题很难,debug一遍才看明白。debug过程如下:
     9 初始化:count{A:1, B:1, C:1}                    cnt = 0    滑动窗口[]
    10        1.   {A:0, B:1, C:1}                    cnt = 1    [A]
    11        2.   {A:0, B:1, C:1, D:-1}              cnt = 1    [AD]
    12        3.   {A:0, B:1, C:1, D:-1, O:-1}        cnt = 1    [ADO]
    13        4.   {A:0, B:0, C:1, D:-1, O:-1}        cnt = 2    [ADOB]
    14        5.   {A:0, B:0, C:1, D:-1, O:-1, E:-1}  cnt = 2    [ADOBE]
    15        6.   {A:0, B:0, C:0, D:-1, O:-1, E:-1}  cnt = 3    [ADOBEC]
    16        ----------------cnt==len(t)时将结果保存-----------------------
    17        ----------------开始移动窗口左端------------------------------
    18        7.   {A:1, B:0, C:0, D:-1, O:-1, E:-1}  cnt = 2    [DOBEC]
    19        ----------------cnt!=len(t),开始移动窗口右端-------------------
    20        8.   {A:1, B:0, C:0, D:-1, O:-2, E:-1}  cnt = 2    [DOBECO]
    21        9.   {A:1, B:0, C:0, D:-2, O:-2, E:-1}  cnt = 2    [DOBECOD]
    22        10.  {A:1, B:0, C:0, D:-2, O:-2, E:-2}  cnt = 2    [DOBECODE]
    23        11.  {A:1, B:-1, C:0, D:-2, O:-2, E:-2}  cnt = 2   [DOBECODEB]
    24        12.  {A:0, B:-1, C:0, D:-2, O:-2, E:-2}  cnt = 3    [DOBECODEBA]
    25        --------------如果小于之前的长度,则保存,移动左端窗口------------
    26        13.  {A:0, B:-1, C:0, D:-1, O:-2, E:-2}  cnt = 3    [OBECODEBA]
    27        14.  {A:0, B:-1, C:0, D:-1, O:-1, E:-2}  cnt = 3    [BECODEBA]
    28        15.  {A:0, B:0, C:0, D:-1, O:-1, E:-2}  cnt = 3    [ECODEBA]
    29        16.  {A:0, B:0, C:0, D:-1, O:-1, E:-1}  cnt = 3    [CODEBA]
    30        17.  {A:0, B:0, C:1, D:-1, O:-1, E:-1}  cnt = 2    [ODEBA]
    31        --------------cnt!=len(t),开始移动窗口右端-------------------
    32        18.  {A:0, B:0, C:1, D:-1, O:-1, E:-1, N:-1}  cnt = 2    [ODEBAN]
    33        19.  {A:0, B:0, C:0, D:-1, O:-1, E:-1, N:-1}  cnt = 3    [ODEBANC]
    34        -----------果小于之前的长度,则保存,移动左端窗口------------------
    35        20.  {A:0, B:0, C:0, D:-1, O:0, E:-1, N:-1}  cnt = 3    [DEBANC]
    36        21.  {A:0, B:0, C:0, D:0, O:0, E:-1, N:-1}  cnt = 3    [EBANC]
    37        22.  {A:0, B:0, C:0, D:0, O:0, E:0, N:-1}  cnt = 3    [BANC]
    38        23.  {A:0, B:1, C:0, D:0, O:0, E:0, N:-1}  cnt = 2    [ANC]
    39 """
    40 class Solution:
    41     def minWindow(self, s, t):
    42         import collections
    43         res = ""
    44         left, cnt, minLen = 0, 0, float('inf')
    45         count = collections.Counter(t)
    46         for i, c in enumerate(s):
    47             count[c] -= 1
    48             if count[c] >= 0:
    49                 cnt += 1
    50             while cnt == len(t):
    51                 if minLen > i - left + 1:
    52                     minLen = i - left + 1
    53                     res = s[left : i + 1]
    54                 count[s[left]] += 1
    55                 if count[s[left]] > 0:
    56                     cnt -= 1
    57                 left += 1
    58         return res
  • 相关阅读:
    程序是怎样跑起来的 第三章
    C#4.5-4.7学习总结
    第二周学习总结
    程序是如何跑起来的 第二章
    第一章读后感
    师生关系读后感
    C#学习总结
    我与计算机
    读《程序怎样跑起来》第一章有感
    读师生关系有感
  • 原文地址:https://www.cnblogs.com/yawenw/p/12369921.html
Copyright © 2020-2023  润新知