6.29 - hard - 18

76. Minimum Window Substring
這題用動態(tài)窗口一次性AC了,但是代碼寫的比較爛,有點虛,再去看看答案,看看別人怎么寫的

class Solution(object):
   def minWindow(self, s, t):
       """
       :type s: str
       :type t: str
       :rtype: str
       """
       h = {}
       for c in t:
           h[c] = h.get(c, 0) + 1
       
       start = 0
       end = 0
       window = ""
       length = sys.maxint
       i = 0
       while i < len(s):
           if s[i] in h:
               h[s[i]] -= 1
               if all([v <= 0 for v in h.values()]):
                   if end - start + 1 < length:
                       length = end - start + 1
                       window = s[start:end+1]
                   # move left side
                   while all([v <= 0 for v in h.values()]):
                       if s[start] in h:
                           h[s[start]] += 1
                       start += 1
                       if all([v <= 0 for v in h.values()]):
                           if end - start + 1 < length:
                               length = end - start + 1
                               window = s[start:end+1]
           i += 1
           end = i
           
       return window

找到一種記錄當前字符有效長度的解法,比我那種all()的解法簡直不知道好多少倍

class Solution(object):
    def minWindow(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        
        if len(s) < len(t): 
            return ""
        
        collect = {}
        for item in t:
            if item in collect:
                collect[item] += 1
            else:
                collect[item] = 1
        # 記錄最大可能end和start而非記錄長度
        maxend = 2147483647        
        maxstart = 0
        start = end = 0
        count = len(t)
        
        while end < len(s):
            if s[end] in collect:
                # 移動右邊界,如果右邊屆正好是collect中缺少的部分,那么就減少count
                if collect[s[end]] > 0: 
                    count -= 1
                collect[s[end]] -= 1 # 注意此時collect中的值可能是負數(shù)
            end += 1
            
            while count == 0: # 說明找到一個可能性
                if end - start < maxend - maxstart:
                    maxend, maxstart = end, start
                # 移動左邊界
                if s[start] in collect:
                    collect[s[start]] += 1
                    if collect[s[start]] > 0:
                        count += 1
                start += 1
            
        if maxend - maxstart >= 2147483647:
            return ""
                
        return s[maxstart:maxend]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,936評論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 18,431評論 2 36
  • 一、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,945評論 0 8
  • 文~范乘風 許多時候 我愛在水邊獨行 思考和寫詩 風吹過兩岸的蘆葦 魚眠水底 倦鳥歸林 安靜得只有影子陪伴 我穿過...
    范乘風閱讀 182評論 0 2
  • 我在讀這本書前,看了《靈魂有香氣的女子》,看了這本書之后我便去國圖辦了借書證,以前看書基本上都是直接買的,現(xiàn)在有借...
    肥玉書生閱讀 802評論 0 1

友情鏈接更多精彩內(nèi)容