博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】76. Minimum Window Substring
阅读量:6448 次
发布时间:2019-06-23

本文共 2169 字,大约阅读时间需要 7 分钟。

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.

 

由于大小写字母的ASCII码不大于128,因此开辟两个数组存储信息。

needFind数组存储T字符串每个字符出现次数。例如:needFind['A']=5意为T中A出现5次。

Found数组存储S字符串在[begin,end]窗口内每个字符出现次数。

算法核心思想如下:

在保证[begin,end]窗口包含T中所有字符的条件下,延伸end,收缩begin。

进行一次扫描后,记录符合条件的最小窗口(end-begin+1)表示的字符串。

有个问题:怎样才知道[begin,end]窗口包含了T中所有字符?

我使用count记录剩余“有效”字符数,当count达到0时,即可说明[begin,end]包含了T。

注意:“有效”的意思是指,当前延伸得到的S[end]字符,使得[begin,end]更进一步包含T,而不是重复劳动。

比如说,T="a", [begin,end]已经包含"a",再延伸得到"aa",只是无效操作,并没有使得[begin,end]更接近T,有效字符数仍为1.

 

class Solution {public:    string minWindow(string S, string T) {        int begin = 0;        int end = 0;        int minbegin = 0;        int minend = 0;        int minSize = INT_MAX;        vector
needFind(128, 0); vector
Found(128, 0); for(int i = 0; i < T.size(); i ++) needFind[T[i]] ++; Found[S[0]] ++; int count = T.size(); if(needFind[S[0]] >= Found[S[0]]) count --; while(true) { if(count == 0) {
//shrink begin while(Found[S[begin]] > needFind[S[begin]]) { Found[S[begin]] --; begin ++; } int size = end-begin+1; if(size < minSize) { minbegin = begin; minend = end; minSize = size; } } if(end < S.size()) { end ++; Found[S[end]] ++; if(needFind[S[end]] >= Found[S[end]]) count --; } else break; } if(minSize != INT_MAX) return S.substr(minbegin, minSize); else return ""; }};

转载地址:http://ahowo.baihongyu.com/

你可能感兴趣的文章
SQLServer判断指定列的默认值是否存在,并修改默认值
查看>>
heartbeat+drbd+mysql:实现最廉价的高可用组合
查看>>
解决NGINX+PHP-FPM failed to ptrace(PEEKDATA) Input/output error出错问题
查看>>
splice和sendfile
查看>>
基于rsync+inotify实现数据实时同步传输
查看>>
【No.11 默认实参的匹配】
查看>>
一键生成表结构说明文档的参考,数据字典生成方式参考
查看>>
CCNP课堂练习一:详解交换机vlan的介绍及通过交换机从逻辑上划分区域配置
查看>>
awk实际应用:文本合并
查看>>
Silverlight发布时的优化工作(2)
查看>>
Visual Studio 2010 Ultimate测试体系结构
查看>>
推荐《认知与设计——理解UI设计准则》读书笔记
查看>>
Windows 2003 AD升级至Windows 2012 AD之DHCP服务器迁移
查看>>
创建和管理表
查看>>
手机视频开发包
查看>>
Nagios短信报警功能通过飞信实现
查看>>
活动目录系列之一:基本概念
查看>>
DNS原理介绍和具体搭建DNS
查看>>
MDOP中的诊断和恢复工具——DaRT
查看>>
mysql dba系统学习(17)mysql的备份和恢复的完整实践
查看>>