摘要:逐步逼近法,類似于牛頓迭代法。重點是找到規律,然后將規律加以表示。動態規劃,相鄰兩個位置之間的關系。字符串的疊加,可以增加共性,通過相減可以得到邊界位置處符合規律的要求。學會將問題轉化為可求的邊界問題。
吃透題目:
任何問題的解決在于理解題目,挖掘本質。 這道題目,從一個string中找包含char的最小子序列,O(n),要求只能遍歷一遍。 每次移動一個index,都嘗試找子序列,通過對目標子序列統計數目,與當前的char的數目進行合并,然后子循環while的時候,通過減法操作,達到==0的條件時候,就可以知道這是最短的子序列的邊界,同理for循環向后迭代。
相似: kmp算法,保持狀態,省略不必要的遍歷,從上次移動到的位置i,繼續向后移動。
逐步逼近法,類似于牛頓迭代法。重點是找到規律,然后將規律加以表示。 動態規劃,相鄰兩個位置之間的關系。
應用:
學會記錄狀態,沒有必要再次重復的位置,通過記錄加以過濾。 字符串的疊加,可以增加共性,通過相減可以得到邊界位置處符合規律的要求。 學會將問題轉化為可求的邊界問題。
import collections class Solution: def minWindow(self, s, t): """ :type s: str :type t: str :rtype: str """ missing=len(t) need=collections.Counter(t) i=I=J=0 # J=len(s) for j,c in enumerate(s,1): missing-=need[c]>0 need[c]-=1 if not missing: # tmp1=s[i] # tmp3=need[s[i]] # tmp2=need[s[i]] < 0 while (i=0 and j-i<=J-I) or J==0: I=i J=j # print("I,J==>",I,J) return s[I:J] if __name__=="__main__": S = "ADOBEBCBODEBBANNNNACB" T = "ABC" S="ab" T="a" # S="a" # T="aa" st=Solution() out=st.minWindow(S,T) print("out==>",out)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44744.html
LeetCode[76] Minimum Window Substring Given a string S and a string T, find the minimum window in S whichwill contain all the characters in T in complexity O(n). For example, S = ADOBECODEBANC T = AB...
摘要:使用而不是因為我們需要的是最值,中間值我們不在乎,所以一次收斂到最小。下面來三個需要查重并且記錄上次出現的位置,選擇以為例,走到用做檢查,發現出現過,把移到的下一個。是上個題目的簡易版,或者特殊版。 這里聊一聊解一類問題,就是滿足某一條件的substring最值問題。最開始我們以Minimum Window Substring為例,并整理總結leetcode里所有類似題目的通解。 Gi...
閱讀 3049·2021-11-22 15:29
閱讀 1729·2021-10-12 10:11
閱讀 1751·2021-09-04 16:45
閱讀 2229·2021-08-25 09:39
閱讀 2790·2021-08-18 10:20
閱讀 2511·2021-08-11 11:17
閱讀 447·2019-08-30 12:49
閱讀 3305·2019-08-30 12:49