[LeetCode]题解(python):076-Minimum Window Substring

时间:2021-12-15 01:29:34

题目来源:

  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):

  

 class Solution(object):
def minWindow(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
m,n = len(s),len(t)
if m == 0 or n == 0:
return ""
dn,dm = {},{}
for i in t:
if i in dn:
dn[i] += 1
else:
dn[i] = 1
i,first,last,mark,mark1 = 0,0,0,True,False
count = 0
while i < m:
if s[i] in dn:
if mark:
first,mark = i,False
if s[i] in dm:
dm[s[i]]+=1
else:
dm[s[i]] = 1
if dm[s[i]] <= dn[s[i]]:
count += 1
if count == n:
mark1 = True
last = i;break
i += 1
if not mark1:
return ""
t = first
while t < m:
if s[t] in dm:
if dm[s[t]] == dn[s[t]]:
first = t;break
else:
dm[s[t]] -= 1
t += 1
ans = [first,last]
while True:
j,k = first + 1,last + 1
tmp = s[first]
while j < m:
if s[j] in dn:
if dm[s[j]] <= dn[s[j]]:
first = j;break
else:
dm[s[j]] -= 1
j += 1
while k < m:
if s[k] == tmp:
last,t = k,first
while t < m:
if s[t] in dm:
if dm[s[t]] == dn[s[t]]:
first = t;break
else:
dm[s[t]] -= 1
t += 1
if last - first <= ans[1] - ans[0]:
ans = [first,last]
break
if s[k] in dm:
dm[s[k]] += 1
k += 1
if k == m:
break
return s[ans[0]:ans[1]+1]

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

[LeetCode]题解(python):076-Minimum Window Substring的更多相关文章

  1. Java for LeetCode 076 Minimum Window Substring

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  2. LeetCode(76) Minimum Window Substring

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

  3. 076 Minimum Window Substring 最小窗口子字符串

    给定一个字符串 S 和一个字符串 T,找到 S 中的最小窗口,它将包含复杂度为 O(n) 的 T 中的所有字符.示例:S = "ADOBECODEBANC"T = "AB ...

  4. Minimum Window Substring &commat;LeetCode

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

  5. LeetCode解题报告—— Minimum Window Substring &amp&semi;&amp&semi; Largest Rectangle in Histogram

    1. Minimum Window Substring Given a string S and a string T, find the minimum window in S which will ...

  6. 【LeetCode】76&period; Minimum Window Substring

    Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...

  7. leetcode76&period; Minimum Window Substring

    leetcode76. Minimum Window Substring 题意: 给定字符串S和字符串T,找到S中的最小窗口,其中将包含复杂度O(n)中T中的所有字符. 例如, S ="AD ...

  8. 53&period; Minimum Window Substring

    Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...

  9. 刷题76&period; Minimum Window Substring

    一.题目说明 题目76. Minimum Window Substring,求字符串S中最小连续字符串,包括字符串T中的所有字符,复杂度要求是O(n).难度是Hard! 二.我的解答 先说我的思路: ...

  10. &lbrack;leetcode&rsqb;Minimum Window Substring &commat; Python

    原题地址:https://oj.leetcode.com/problems/minimum-window-substring/ 题意: Given a string S and a string T, ...

随机推荐

  1. poj 2187 Beauty Contest&lpar;凸包求解多节点的之间的最大距离&rpar;

    /* poj 2187 Beauty Contest 凸包:寻找每两点之间距离的最大值 这个最大值一定是在凸包的边缘上的! 求凸包的算法: Andrew算法! */ #include<iostr ...

  2. TCPIP&comma;Http&comma;Socket的区别

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  3. 用MATLAB画函数的曲线

    用MATLAB画函数曲线 2013年8月11日 命令funtool 这是单变量函数分析的交互界面,比较方便,特别适用于y=f(x)型,即y与x分开的函数形式.见下图

  4. Eclipse中处理图片引包问题

    在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEG ...

  5. Android群英传》读书笔记 &lpar;1&rpar; 第一章 Android体系与系统架构 &plus; 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...

  6. Nagios配置—添加linux主机监控

    nagios安装请参看:Nginx平台安装Nagios监控服务 下面是我添加linux监控机的过程,如有错误或者不当的地方请指出: 测试环境: 监控主机:nagios+nagios插件+nrpe+网站 ...

  7. javascript sort&lpar;&rpar;与reverse&lpar;&rpar;

    javascript 中提供了两个对数据进行排序的方法,即sort()和reverse() 在理解的时候犯了一个非常低级的错误,现记录如下: reverse()不包括排序的功能,只是把原来的数组反转. ...

  8. Mac下安装node&period;js和webpack

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #393939 } p.p2 ...

  9. Padding Borders Outlines Margins

    简介: 在20世纪90年代,许多网页布局是使用table,使用table最主要的原因是因为可以放text到一个盒子里,但是这是一个比较复杂的过程,现在可以使用比较简单的方法,那就是css. 元素盒子: ...

  10. spring mvc&colon;事务引起的try/catch失效

    在测试一个接口时,发现一个奇怪的现象:该接口使用@ResponseBody注解返回json格式数据,并且使用try/catch包括全部逻辑代码,debug后发现返回数据没有任何错误,只包含一段因产生异 ...