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,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...
随机推荐
- dialog的各类显示方法
图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 代码: 创建对话框方法dialog() protected void dialog() { AlertDialo ...
- openpyxl python操作Excel表格,
这里openpyxl只支持xlsx格式的Excel,openpyxl使用起来会更方便一些,所以如果只操作小流水线文件的话,那么可以优先选择openpyxl,如果要兼容xls的话,就使用xlrd/xlw ...
- Product Device Lot
Product是指产品: 这个Product可以在不同的设备类型上生产, 同一类型的设备也可能硬件有差异,所以会有相对应的Device(Recipe): 同一Product(或同一Device)由于数 ...
- JS实现随机颜色的3种方法与颜色格式的转化
JS实现随机颜色的3种方法与颜色格式的转化 随机颜色和颜色格式是我们在开发中经常要用到的一个小功能,网上相关的资料也很多,想着有必要总结一下自己的经验.所以这篇文章主要介绍了JS实现随机颜色的3种 ...
- day04-交互、格式化输出及基本运算符
目录 与用户交互 python2和python3交互的区别 格式化输出 1 字符串拼接 2 占位符 3 format格式 4 f-string格式 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑 ...
- CAD插入jpg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 如何使用 Python 创建一名可操控的角色玩家
在 这个系列的第一篇文章 中,我解释了如何使用 Python 创建一个简单的基于文本的骰子游戏.在第二部分中,我向你们展示了如何从头开始构建游戏,即从 创建游戏的环境 开始.但是每个游戏都需要一名玩家 ...
- [转载]java中Date,SimpleDateFormat
一.Java中的日期概述: 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在Java ...
- Django - 视图获取请求头
1.urls.py(url和函数对应关系) 2.通过request.evniron,返回request的所有信息,用索引的方式,获取用户请求头信息. 3.也可以通过key,value方式,来展示请求头 ...
- Django - 一对多数据示例
1.增加Host -id 可以在模版中增加代码: 备注: 1.counter (从1开始) 2.counter0(从0开始) 3.revcounter(倒序) 4.revcounter0(倒序从0开始 ...