leetcode76 Minimum Window Substring
2021-03-18 02:25
标签:str ado enumerate collect har def tput span 长度 leetcode76 Minimum Window Substring 标签:str ado enumerate collect har def tput span 长度 原文地址:https://www.cnblogs.com/yawenw/p/12369921.html 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#音乐播放器
文章标题:leetcode76 Minimum Window Substring
文章链接:http://soscw.com/essay/65580.html