76. Minimum Window Substring

最后更新

一刷
08-Jan-2017

昨天Amazon group面结束,刚回家。
国内以前喜欢的女生结婚了,嘿嘿...好开心呀~~

image

这次面试感觉自己的做法完爆别人,比什么2 greedy好多了= = 总之表现比想象的好,最后一面的面试官真是聪明得一逼,我的思路稍微说她就明白,跪了,这也太出色了。 我只能说A家对于背题党直接OA拿VIDEO或者OFFER确实水,但是有实力的也有,比如给我面试的这个印度姐姐,屌屌屌。

总之希望自己能过能过。

开始准备Google吧。

言归正传。

一长一短2个String

在长的String里找最短的substring,使得substring包含所有短string的字符。
('a'在短字符串里出现2次,substring里也要出现2次才行)

2 pointers来做的,固定左边,右边往右找,直到substring满足要求。 在往右的过程中,我们可能添加了很多不必要元素:
要满足abc
我们在ab baba cba里找,找到C的时候,添加了baba这段没用的,这个时候尝试左边缩进。

比较通过2个int[256],一个是需要的字符数,一个是现有的。

Time: O(n)
Space: O(1)

public class Solution {public String minWindow(String s, String t) {if (s.length() < t.length()) return "";int[] need = new int[256];int[] count = new int[256];for (char c : t.toCharArray()) {need[c]++;}int right = 0;String res = "";int minLength = Integer.MAX_VALUE;for (int left = 0; left < s.length(); left++) {while (right < s.length() && !contains(need, count)) {count[s.charAt(right++)] ++;}if (right - left < minLength && contains(need, count)) {minLength = right - left;res = s.substring(left, right);}count[s.charAt(left)] --;}return res;}public boolean contains(int[] need, int[] count) {for (int i = 0; i < 256; i++) {if (need[i] > count[i]) {return false;}}return true;}
}

方法二:

也是2 pointers,和一的做法差不多,唯一不同的就是判断是否包含的方法。

方法一是通过比较int[256]来判断是否包含所有character,这里有个别的方法。

比如短string是abcde,那么总共需要5个字符才能满足。但也不是随便5个字符就能满足,只有某些字符才能满足。
比如:
一开始是abcde,需要5个才能满足,而a,b,c,d,e其中任何一个都是有效字符。
假如我们substring中已经有了a和c,需要bde,此时的有效字符就变成了b,d,e,读到b,d,e才可以让需要数字++

同理,缩进也要判断,比如substring里有3个A,缩进最左边缩小了1个A,那么当前需要的元素数量是不变的,因为我们还有2个A可以使用,相反如果缩掉了B,而我们substring里没有B了,总共需要的元素数量就要++

if (--chars[s.charAt(right++)] >= 0) {validRead ++;}

这个说的是,substring读取一个,然后判断是否是有效读取,把那些-- ++之类的给展开就一目了然了,后面的+ + --一样 ,展开再看。

public class Solution {public String minWindow(String s, String t) {if (s.length() == 0 || s.length() < t.length()) return "";String res = "";int minLength = Integer.MAX_VALUE;int[] chars = new int[256];for (char c : t.toCharArray()) {chars[c] ++;}int need = t.length();int validRead = 0;int right = 0;for (int left = 0; left < s.length(); left ++) {while (right < s.length() && validRead < need) {if (--chars[s.charAt(right++)] >= 0) {validRead ++;}}if (validRead >= need && right - left < minLength) {minLength = right - left;res = s.substring(left, right);}if (++chars[s.charAt(left)] > 0) validRead --;   }return res;}
}

方法二是因为后面的题要用到这个办法。

转载于:https://www.cnblogs.com/reboot329/p/6263861.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day 02 python 基础

1.day1作业讲解 题目答案见day1 2.格式化输出 %占位符&#xff0c;s:字符串&#xff0c;d&#xff1a;数字 %%只是单纯的显示%&#xff08;显示的%是后面的&#xff09; 1 #格式化输出2 # % s d3 # name input(请输入姓名)4 # age input(请输入年龄)5 # height input(请输入…

python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...

欢迎关注哈希大数据微信公众号【哈希大数据】在之前我们介绍了直接使用线性回归进行波士顿房价的预测&#xff0c;但是预测准确率仅有60%左右。预测准确率不高一方面是我们未对数据进行一定的预处理(包括归一化和标准化等)&#xff0c;这样不能确保在使用优化方式时&#xff0c…

leetcode64. 最小路径和(dp)

给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。说明&#xff1a;每次只能向下或者向右移动一步。示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。代码 …

mysql浅拷贝_深拷贝与浅拷贝

在Python中&#xff0c;对象赋值实际上是对象的引用。当创建一个对象&#xff0c;然后把它赋给另一个变量的时候&#xff0c;Python并没有拷贝这个对象&#xff0c;而只是拷贝了这个对象的引用。1、浅拷贝&#xff1a;利用切片操作、工厂方法list方法拷贝2、深拷贝&#xff1a;…

盘州市“检企联合” 探索大数据应用新路

为认真贯彻落实“科技强检”及推进大数据应用的决策部署&#xff0c;8月31日&#xff0c;盘州市人民检察院组织召开以“检察大数据”为主题的“两长”座谈会。市经信局、中国移动盘州分公司、中国电信盘州分公司等单位负责人&#xff0c;检察院在家班子成员及院各部门主要负责人…

iOS中的颜色

最近在改Bug的时候&#xff0c;才注意到iOS 中的颜色竟然也大有文章&#xff0c;特来记录一下。 先说一下问题&#xff0c;因为某界面中有用xib实现的一个view&#xff0c;而这个view 只在UIColletionView的layout 里通过nib 注册使用&#xff0c;为这个xib设置了背景色&#x…

编程面试中需要了解的5件事

This article is intended for those who are trying to start their programming career, or are preparing to interview for their dream job. As someone who’s been on both sides of the interviewing table, I understand how it feels to be the interviewee.本文适用…

多线程的基础知识

1、程序、进程、线程的基本概念 程序&#xff1a;为了完成某种任务用某一种语言编写的一组指令的集合就叫程序。程序就是一段静态的代码。 进程&#xff1a;进程是程序的依次执行过程&#xff0c;或者说是正在运行的一个程序。这是一个动态的过程&#xff0c;有它自身的产生运行…

springboot实现单点登录_什么是单点登录,php是如何实现单点登录的

文章来自&#xff1a;php中文网链接&#xff1a;https://www.php.cn/php-weizijiaocheng-429869.html作者&#xff1a;中文网商务合作:请加微信(QQ)&#xff1a;2230304070视频教程分享码农网&#xff1a;http://www.mano100.cn/rjyfk_url-url.html &#xff0c;升级终身会员即…

背景图处理,这是个好东西记录一下

背景图处理 rgba &#xff08;&#xff09;&#xff0c;前3个是三原色&#xff0c;第四个参数是透明度转载于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(图形用户界面)

打开后&#xff1a; File→New File(Ctrl N) 转载于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

&#x1f3e1;《专栏目录》 目录 1&#xff0c;概述2&#xff0c;复用方法一视频演示2.1&#xff0c;创建工程2.2&#xff0c;复用设计文件 3&#xff0c;复用方法二视频演示4&#xff0c;总结 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 本文简述使用AD软件复用设计文件…

两点定标法_一种两点校正红外热像仪的非均匀性的模块及方法

一种两点校正红外热像仪的非均匀性的模块及方法【技术领域】[0001] 本发明属于红外热成像系统的非均匀性校正领域&#xff0c;特别是一种两点校正红外热像 仪的非均匀性的模块及方法。【背景技术】[0002] 在过去的几十年中&#xff0c;红外探测器件的元数不断增加&#xff0c;由…

leetcode851. 喧闹和富有(dfs)

在一组 N 个人&#xff08;编号为 0, 1, 2, …, N-1&#xff09;中&#xff0c;每个人都有不同数目的钱&#xff0c;以及不同程度的安静&#xff08;quietness&#xff09;。 为了方便起见&#xff0c;我们将编号为 x 的人简称为 "person x "。 如果能够肯定 perso…

如何选择正确的容器编排以及如何进行部署

by Michael Douglass迈克尔道格拉斯(Michael Douglass) 如何选择正确的容器编排以及如何进行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 学习笔记(三)

oracle 表查询 oracle 表基本查询 在此&#xff0c;基于 scott 用户存在的 emp&#xff0c;dept 表演示学习。 emp 雇员表 clerk 员工 salesman 销售 manager 经理 analyst 分析师 president 总裁 mgr 上级的编号 hiredate 入职时间 sal 工资 comm 奖金 deptno 部…

html meta标签使用总结(转)

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查…

bzoj 4009 接水果 整体二分

Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 Solution 对于x-lca-y的盘子&#xff0c;水果一定一个在x子树&#xff0c;一个在y子树 对于x-lca的…

离散元 python_刚开始学习离散元软件Yade,有什么建议?

用Yade-DEM 做过博士期间的部分工作&#xff0c;也是从毫无所知到算是入门&#xff0c;分享一点我的学习过程&#xff0c;为那些刚接触Yade的同学提供些许参考&#xff0c;希望对大家有帮助。0. Yade 简介Yade 是一个用于离散元分析的开源平台&#xff0c;是法国Lab 3SR-Grenob…

leetcode529. 扫雷游戏(dfs)

让我们一起来玩扫雷游戏&#xff01; 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷&#xff0c;‘E’ 代表一个未挖出的空方块&#xff0c;‘B’ 代表没有相邻&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4个对角线&#…