题目来源:

  https://leetcode.com/problems/minimum-window-substring/


题意分析:

  给定两个字符串S和T。在S中找到最短的一个子字符串使得他包括所有的T。比如:S = "ADOBECODEBANC",T = "ABC",那么返回"BANC"。要求时间复杂度O(n)。


题目分析:

  利用字典记录T中每个字符出现的次数。①在S中找到最开始包括所有T中字符的一个结果,并且使得这个结果的第一个字符是T中的。也就是先找到一个满足答案。上题例子就是找到了"ADOBEC",更新目前的答案,使得当前答案中没有更短的字符串满足,也就是说,如果上题找到的满足是"AADOBEC"的话,要更新为"ADOBEC",记录当前的长度和当前答案。②然后去掉第一个字符,然后往后更新,直到再次找到满足的答案,接着更新答案,比较和第一个的长度,如果是比第一个更短,更新长度和答案。③重复②的动作,直到找到了S中的末尾。


代码(Python):

  

 1 class Solution(object):
 2     def minWindow(self, s, t):
 3         """
 4         :type s: str
 5         :type t: str
 6         :rtype: str
 7         """
 8         m,n = len(s),len(t)
 9         if m == 0 or n == 0:
10             return ""
11         dn,dm = {},{}
12         for i in t:
13             if i in dn:
14                 dn[i] += 1
15             else:
16                 dn[i] = 1
17         i,first,last,mark,mark1 = 0,0,0,True,False
18         count = 0
19         while i < m:
20             if s[i] in dn:
21                 if mark:
22                     first,mark = i,False
23                 if s[i] in dm:
24                     dm[s[i]]+=1
25                 else:
26                     dm[s[i]] = 1
27                 if dm[s[i]] <= dn[s[i]]:
28                     count += 1
29                 if count == n:
30                     mark1 = True
31                     last = i;break
32             i += 1
33         if not mark1:
34             return ""
35         t = first
36         while t < m:
37             if s[t] in dm:
38                 if dm[s[t]] == dn[s[t]]:
39                     first = t;break
40                 else:
41                     dm[s[t]] -= 1
42             t += 1
43         ans = [first,last]
44         while True:
45             j,k = first + 1,last + 1
46             tmp = s[first]
47             while j < m:
48                 if s[j] in dn:
49                     if dm[s[j]] <= dn[s[j]]:
50                         first = j;break
51                     else:
52                         dm[s[j]] -= 1
53                 j += 1
54             while k < m:
55                 if s[k] == tmp:
56                     last,t = k,first
57                     while t < m:
58                         if s[t] in dm:
59                             if dm[s[t]] == dn[s[t]]:
60                                 first = t;break
61                             else:
62                                 dm[s[t]] -= 1
63                         t += 1
64                     if last - first <= ans[1] - ans[0]:
65                         ans = [first,last]
66                     break
67                 if s[k] in dm:
68                     dm[s[k]] += 1
69                 k += 1
70             if k == m:
71                 break
72         return s[ans[0]:ans[1]+1]
73         

View Code


转载请注明出处:http://www.cnblogs.com/chruny/p/5088501.html

转载于:https://www.cnblogs.com/chruny/p/5088501.html

[LeetCode]题解(python):076-Minimum Window Substring相关推荐

  1. Minimum Window Substring @LeetCode

    不好做的一道题,发现String Algorithm可以出很多很难的题,特别是多指针,DP,数学推导的题.参考了许多资料: http://leetcode.com/2010/11/finding-mi ...

  2. 【打印代码+好好理解+子串问题】LeetCode 76. Minimum Window Substring

    LeetCode 76. Minimum Window Substring 字符串子串问题!!!理解这题真是花了很大的功夫!!! 参考链接:https://blog.csdn.net/weixin_4 ...

  3. LeetCode 76. Minimum Window Substring / 567. Permutation in String

    76. Minimum Window Substring 典型Sliding Window的问题,维护一个区间,当区间满足要求则进行比较选择较小的字串,重新修改start位置. 思路虽然不难,但是如何 ...

  4. LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]...

    题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...

  5. LeetCode - Minimum Window Substring

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  6. [LeetCode] Minimum Window Substring 散列映射问题

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  7. LeetCode 笔记系列16.1 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]...

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  8. LeetCode 笔记系列16.2 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]...

    题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...

  9. 72.Minimum Window Substring(最小子串窗口)

    Level:   Hard 题目描述: Given a string S and a string T, find the minimum window in S which will contain ...

  10. Minimum Window Substring 最小覆盖子串算法

    转载:https://blog.csdn.net/fly_yr/article/details/51134340 题目 最小子串覆盖 给定一个字符串source和一个目标字符串target,在字符串s ...

最新文章

  1. 通过Java代码打开浏览器,本地文件目录以及ftp站点
  2. 如何将hive查询结果导出成txt文件
  3. 随想录(锁的来由和使用)
  4. 方正飞腾4.0视频教程
  5. 中国城市燃气行业供需前景及未来竞争走势研究报告2021版
  6. 区块链学习笔记12——BTC思考
  7. PHP语言对用户输入的身份证信息进行实名认证(阿里云身份证实名认证接口API)
  8. web课程设计:网上商城系统
  9. Tiled源码分析: 序
  10. C语言头文件.h互相包含所引发的一系列错误C2143之类的解决方法
  11. JavaCV音视频开发宝典:JavaCV使用gdigrab方式实现windows录屏(windows屏幕画面抓取/采集,可实现高帧率屏幕截屏、录屏功能)
  12. 基于C语言设计的小型图形软件系统
  13. 使用javascript抓取网站数据
  14. spark 相关性分析_基本统计 - correlations(相关性系数) - 《spark机器学习算法研究和源码分析》 - 书栈网 · BookStack...
  15. Java编程思想总结篇(1-11章学习笔记)——第五章
  16. 错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)
  17. 用计算机写试卷反思,“我的试卷,我分析,我反思1——学生写试卷分析及反思的收获...
  18. 【Excel】排名之成绩并列排名(sumproduct、countif 函数的组合使用方法)
  19. Java - 校园类型系统班级升年级
  20. 论文笔记之Unipose

热门文章

  1. 3 域名正则_一个正则表达式怎么会引起线上CPU狂飙?
  2. mysql双主同步一个库,CNESA
  3. MFC:ListControl数据修改
  4. 【AutoML】进化算法如何用于自动模型搜索(NAS)
  5. 【通知】2020年有三AI-CV夏季划升级,更多项目,更高难度,更加落地
  6. Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
  7. vc++6.0 同步本机时间到Internet NTP服务器 编译通过
  8. 性能测试四十八:Jenkins+Ant+Jmeter系统部署
  9. HNOI2017 day1 T3 礼物
  10. ExtJs组件之间的相互访问,访问机制