摘要:逐步逼近法,类似于牛顿迭代法。重点是找到规律,然后将规律加以表示。动态规划,相邻两个位置之间的关系。字符串的叠加,可以增加共性,通过相减可以得到边界位置处符合规律的要求。学会将问题转化为可求的边界问题。
吃透题目:
任何问题的解决在于理解题目,挖掘本质。 这道题目,从一个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)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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...
阅读 3034·2021-11-22 15:29
阅读 1712·2021-10-12 10:11
阅读 1721·2021-09-04 16:45
阅读 2198·2021-08-25 09:39
阅读 2776·2021-08-18 10:20
阅读 2483·2021-08-11 11:17
阅读 432·2019-08-30 12:49
阅读 3290·2019-08-30 12:49