`
huntfor
  • 浏览: 201335 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Minimum Window Substring

 
阅读更多

新博文地址:[leetcode]Minimum Window Substring

 

Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

For example,
S = "ADOBECODEBANC"
T = "ABC"
Minimum window is "BANC".

Note:
If there is no such window in S that covers all characters in T, return the emtpy string "".

If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.

 被超时弄疯了,好吧,不会就看别人做的好了。题目为minimum window substring起的实在是太贴切了,即在S中找到一个短子串,该子串可以完全包含集合T(这里不要求S的子串按照T的顺序),但是题中未指明T中可不可以包含重复字符,因此需要一个hashTable来记录T中字符出现的次数。题中似乎默认ASCII编码,因此可以用一个数组来代替hashMap。

参考博文算法:

可以利用两个指针扫描(两个指针分别为start,i),以S = “e b a d b a c c b”(忽略空格),T = “abc”为例:

0 1 2 3 4 5 6 7 8

初始化 start = i = 0
1)i 逐渐往后扫描S直到窗口S[start…i]包含所有T的字符,此时i = 6(字符c的位置)
2)缩减窗口:此时我们注意到窗口并不是最小的,需要调整 start 来缩减窗口。
缩减规则为:如果S[start]不在T中 或者 S[start]在T中但是删除后窗口依然可以包含T中的所有字符,那么start = start+1, 直到不满足上述两个缩减规则。缩减后i即为窗口的起始位置,此例中从e开始窗口中要依次删掉e、b、a、d,start最后等于4 ,那么得到一个窗口大小为6-4+1 = 3
3)start = start+1(此时窗口肯定不会包含所有的T中的字符),跳转到步骤2继续寻找下一个窗口。本例中还以找到一个窗口start = 5,i = 8,比上个窗口大,因此最终的最小窗口是S[4…6]

 

具体实现时,要用哈希表来映射T中字符以便在O(1)时间内判断一个字符是否在T中,由于是字符缘故,可以用数组简单的来实现;

感觉这道题对于扫描到的子串是否cover到T的处理很是经典,以后可以借鉴一下:

public String minWindow(String S, String T) {
		int[] srcHash = new int[100];
		for(int i = 0; i < T.length(); i++){
			srcHash[T.charAt(i)]++;
		}
		int start = 0,i= 0;
		int[] destHash = new int[100];
		int found = 0;
		int begin = -1, end = S.length(), minLength = 1 + S.length();
		for(start = i = 0; i < S.length(); i++){
			if(srcHash[S.charAt(i)]!=0){
				destHash[S.charAt(i)]++;
				if(destHash[S.charAt(i)] <= srcHash[S.charAt(i)]) found++;
				if(found == T.length()){
					//find the first window that satisfied this condition					
					//next step : shrink the window size
//					System.out.println(S.substring(start, i + 1));
					while(start < i){
						if(srcHash[S.charAt(start)] == 0 || (srcHash[S.charAt(start)] != 0 && (--destHash[S.charAt(start)]) >= srcHash[S.charAt(start)])) {
							start++;
						}else {
							break;
						}
					}
					if(i - start + 1< minLength){
						minLength = i - start + 1;
						begin = start;
						end = i;
					}
					found--;
					start++;
				}
			}
		}
		return begin == -1 ? "" : S.substring(begin,end + 1);
	}

 

分享到:
评论

相关推荐

    实验室设备管理系统 SSM毕业设计 附带论文.zip

    实验室设备管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    PPT高效插件神器推荐-最新发布.zip

    PPT高效插件神器推荐-最新发布.zip

    数据中心机房基础设计及规划方案.pdf

    数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。

    Visio软件全套资源及教程-最新发布.zip

    Visio软件全套资源及教程-最新发布.zip

    2000-2022年中国地级市生态韧性数据集(含原始数据、计算代码及结果,最新).zip

    2000-2022年中国地级市生态韧性数据集(含原始数据、计算代码及结果,最新).zip

    Spring Cloud 配置相关项目.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    全国2009-2021年农业高质量发展指数测算(重磅,更新!)乡村振兴

    1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143778060 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理

    Jupyter_这本书被命名为《木星笔记》.zip

    Jupyter-Notebook

    1949-2021年中国民政统计年鉴-最新数据发布.zip

    1949-2021年中国民政统计年鉴-最新数据发布.zip

    Jupyter_用于plot dash的OOP组件,使仪表板组件可组合、可重用和可配置.zip

    Jupyter-Notebook

    Gartner推荐全球4家专注于通过自动化和人工智能支持SOC的优秀供应商.pdf

    Gartner推荐全球4家专注于通过自动化和人工智能支持SOC的优秀供应商.pdf

    Jupyter_AI 常用脚本.zip

    Jupyter-Notebook

    多种 Spring Boot 技术集成示例,涵盖数据持久化、工具集成、功能模块等方面.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    53朱清清 劳动教育总结报告.doc

    53朱清清 劳动教育总结报告.doc

    Jupyter_CVPR2023强调了一种用于视频预测的动态多尺度体素流网络.zip

    Jupyter-Notebook

    Spss26统计软件最新版-最新发布.zip

    Spss26统计软件最新版-最新发布.zip

    基于springboot mybatis+Mysql 实现的图书管理系统 【web课程设计 】

    【作品名称】:基于springboot mybatis+Mysql 实现的图书管理系统 【web课程设计 】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 主要功能 登录、注销、修改密码 管理员对图书信息的增删改查、查看读者、查看借阅记录 读者对图书信息的查看查询、修改个人信息、查看借阅记录 使用技术 数据库:mysql5.7 后端框架: SpringBoot HTML模板: ThymeLeaf 持久层: Mybatis UI: Bootstrap 登录验证和用户权限: SpringSecurity 使用说明 本项目使用maven进行管理,详细安装教程自行百度 需下载mysql图形化管理工具(例如Navicat),新建数据库library,右键数据库运行项目中的library.sql脚本 用IDE打开项目(建议使用i 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    Python中的动态图形:使用Tkinter绘制跳动的心形

    内容概要:本文详细介绍了用Python的Tkinter库创建动态心脏图形的过程。程序主要由几个部分组成:首先定义了一系列数学函数用于计算心形图的心脏坐标以及散射、收缩效果;然后构建了一个‘BeatingHeart’类来生成不同帧的心跳动画点集;最后,在主函数里调用了这个类的方法绘制出连续的心跳图像,展示了心脏的搏动过程。 适合人群:熟悉Python语言并且对Tkinter库有一定了解的开发者,特别是那些希望利用Python创建图形化应用或者动画模拟的人群。 使用场景及目标:适用于希望快速理解和实现基于Tkinter的基本二维图形与动画制作的学习者或开发者;同时也可以作为图形算法和物理模拟(如粒子系统)的教学案例。 阅读建议:本文涉及到多个函数之间的复杂调用关系,读者需要仔细跟踪每一步操作的具体意义及其参数含义。对于初学者而言,可以先尝试运行示例代码查看实际效果,然后再逐步理解每个部分的功能实现机制。

    宏观面板数据整合(省市区三级)-最新数据.zip

    宏观面板数据整合(省市区三级)-最新数据.zip

    空间计量软件及学习资料-最新更新.zip

    空间计量软件及学习资料-最新更新.zip

Global site tag (gtag.js) - Google Analytics