leetcode第一刷_Minimum Window Substring
好题。字符串。线性时间。
我认为第一次拿到这个题的人应该不会知道该怎么做吧,要么就是我太弱了。。先搞清楚这个题要求的是什么。从一个长字符串中找一个字串,这个字串中的字符全然包括了另一个给定目标串中的字符,且这个字串的长度要求最小。
另一个很重要的简化,题干指明了要求这样的最短字串仅仅有一个,这个限制事实上暗示了这道题的总体思路。仅仅要找到一个长串,然后缩减到不能缩减就可以。
从题目的要求出发能够发现,这道题对于字符串中字符的顺序是没有要求的。因此能够非常自然的想到用hash表来保存目标串中的每一个字符的个数,然后在源字符串中找到一个字串。包括的字符个数大于等于目标串中的就可以。难就难在怎么实现这个功能。
能够把目标串中每一个字符的个数作为它的需求。每当在长字符串中找到了一个字符,这个字符在目标串中存在。那么需求应该降低1。当需求等于0的时候,表示到眼下为止。长字符串中的字符能够恰好满足目标串中这个字符的需求了。假设一个目标串字符的需求变成了负值,说明在当前长度下,在长字符串中对这个字符的供应过剩了。为了描写叙述简便,我定义当长字符串在目标串对这个字符的需求为正时提供了这个字符,为满足了刚性需求,否者是供应过剩。接下来另一个问题,如何知道目标串被全然满足了呢?你当然能够去逐个的扫描需求是不是都变成非正的了,可是另一个更加简单的方法,那就是把目标串的长度看做是总需求,当满足刚性需求时,总需求减1,当总需求变成0时,说明目标串被满足了。
上面描写叙述的过程在长字符串中找到了一个字串,能够全然满足目标串,但并不保证是最短的,由于非常多字符在其它字符没得到满足时已经供应过剩了,如何把这部分多余的去掉呢?从起点開始往后扫秒长字符串。假设当前字符根本不存在于目标串中,能够直接pass。假设存在于目标串中,且供应过剩了。那么这个字符能够从我们的字串中去掉,相当于我们的字串缩短了。可是要记得把需求量++。由于供应量降低了。知道一个字符,它既存在于目标串中,且他的需求量正好是等于0的,我们就得停下了,由于这时候的所有是刚性需求,不能再降低供应了。
代码例如以下,并没有最优化。只是思路是写出来了。
class Solution {
public:
string minWindow(string S, string T) {
int ct1[270], ct2[270];
int mlen1 = S.length();
int mlen2 = T.length();
memset(ct1, 0, sizeof(ct1));
memset(ct2, 0, sizeof(ct2));
int hole = mlen2, minSize = INT_MAX, start = 0, minstart;
for(int i=0;i<mlen2;i++){
ct1[T[i]]++;
ct2[T[i]]++;
}
for(int i=0;i<mlen1;i++){
if(ct2[S[i]]>0){
ct1[S[i]]--;
if(ct1[S[i]]>=0)
hole--;
}
if(hole == 0){
while(start<mlen1){
if(ct2[S[start]]>0){
if(ct1[S[start]]<0)
ct1[S[start]]++;
else
break;
}
start++;
}
if(minSize>i-start+1){
minSize = i-start+1;
minstart = start;
}
}
}
if(minSize == INT_MAX)
return "";
return S.substr(minstart, minSize);
}
};
leetcode第一刷_Minimum Window Substring的更多相关文章
- leetcode第一刷_Minimum Path Sum
能够用递归简洁的写出,可是会超时. dp嘛.这个问题须要从后往前算,最右下角的小规模是已知的,边界也非常明显,是最后一行和最后一列,行走方向的限制决定了这些位置的走法是唯一的,能够先算出来.然后不断的 ...
- leetcode第一刷_Minimum Depth of Binary Tree
非常easy的题目.只是还是认为要说一下. 最小深度.非常快想到bfs,层序遍历嘛.本科的时候实在是没写过多少代码,一開始竟然想不到怎么保存一层的信息.后来想到能够压入一个特殊的对象,每次到达这个对象 ...
- LeetCode解题报告—— Minimum Window Substring && Largest Rectangle in Histogram
1. Minimum Window Substring Given a string S and a string T, find the minimum window in S which will ...
- 【LeetCode】76. Minimum Window Substring
Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...
- 【一天一道LeetCode】#76. Minimum Window Substring
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- 【LeetCode】76. Minimum Window Substring 最小覆盖子串(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 滑动窗口 日期 题目地址: https://leet ...
- 【LeetCode练习题】Minimum Window Substring
找出包含子串的最小窗口 Given a string S and a string T, find the minimum window in S which will contain all the ...
- leetcode第一刷_Set Matrix Zeroes
这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...
- leetcode第一刷_Permutations II
当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...
随机推荐
- Java——Spring配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- (转)在 vue-cli 脚手架中引用 jQuery、bootstrap 以及使用 sass、less 编写 css [vue-cli配置入门]
写在前面: 本文是vue-手摸手教你使用vue-cli脚手架-详细步骤图文解析之后,又一篇关于vue-cli脚手架配置相关的文章,因为有些文章步骤不够清晰,当时我引入JQuery.bootstrap的 ...
- python自动化测试框架(一)
1.开发环境 名称 版本 系统 windows 7 python版本 2.7.14 IDE pycharm2017 2.大致框架流程 :展示了框架实现的业务流程 3.框架介绍 3.1 ======完善 ...
- jQuery——尺寸位置
获取宽:$(".box").width() 设置宽:$(".box").width(200) 获取高:$(".box").height() ...
- JS——stye属性
1.样式少的时候使用 this.parentNode.style.backgroundColor="yellow"; 2.style是对象 console.log(box.styl ...
- c#——值类型与引用类型
值类型传的是值 引用类型传的是地址
- [Windows Server 2008] 安装IIS7.5及FTP
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装IISII ...
- 5.C#编写Redis访问类
那么通过前面几篇博文,服务端的安装和配置应该没什么问题了,接下来的问题是如何通过代码来访问Redis. 这里我们使用的库为: StackExchange.Redis GitHub:https://gi ...
- registerDataSetObserver:浅析Andorid ListView和Adapte
最近由于遇到将内容分部绑定到ListView里的需求,追踪源码之后对ListView和Adapter有了点肤浅的认识,在此与大家分享. 这里用到了观察者模式,在ListView的setAdapter里 ...
- Idea 创建maven web项目(手工创建)
参考链接:https://www.cnblogs.com/justuntil/p/7511787.html 话不多说,直接上图: 1.创建maven项目 创建项目完成,项目结构如下: 2.项目部署配置 ...