Leetcode76. Minimum Window Substring
来源:互联网 发布:海森伯格矩阵 编辑:程序博客网 时间:2024/06/05 06:38
76. Minimum Window Substring
给定一个主串s和匹配串t,要求主串中字串包含t串所有字符,求这样的最小长度字串。
例如
S = "ADOBECODEBANC"
T = "ABC"
则最小字串为“BANC”。
1 这里引入HASH机制,即定义一个map<char,int> a,记录t中每个字符出现的次数这里设置一个计数器cnt表示s字串内出现与t中字符相同的有效字符额个数,即不考虑重覆;
2 引入首尾两个指针i和l,之间就是包含字符串t中所有字符的子串,i指针对s进行遍历,当出现和t中相同字符时,次数减1;头指针l进行区间收缩,当出现和t中相同字符时,次数加1,之所以加1是这些字符将不在最终所选字串内,并自增1
3 t中所有字符串出现的次数等于0(s字串出现次数和t出现次数相同)或者小于0(s字串出现次数大于t出现次数)说明已经包含t中所有元素cnt=t.size()
4 cnt计数原则,当i指针对s进行遍历,当出现和t中相同字符时,次数减1,若此时该字符对应次数大于等于0,则cnt++,否则说明以前已经计数过;同理,头指针l进行区间收缩,当出现和t中相同字符时,次数加1后,要求该字符出现此时大于0才能cnt--,否则说明存在多个这样的字符,
string minWindow(string s,string t){string res="";int slen=s.size();int tlen=t.size();if(slen<1||tlen<1||slen<tlen)return res;map<char,int> a;for(int i=0;i<tlen;i++) a[t[i]]++;int minisize=slen+1;int cnt=0;int l=0;int minl=0;for(int i=0;i<slen;i++){if(a.find(s[i])!=a.end()){ if(--a[s[i]]>=0)cnt++; while(cnt==tlen){if(i-l+1<minisize){minl=l;minisize=i-l+1;}if(a.find(s[l])!=a.end()){if(++a[s[l]]>0)--cnt;}l++; } }}if(minisize>slen)return "";return s.substr(minl,minisize);}例子:
S = "ADOBECODEBANC"
T = "ABC"
运行分析
0 0
- Leetcode76. Minimum Window Substring
- LeetCode76 Minimum Window Substring
- LeetCode76——Minimum Window Substring
- LeetCode: Minimum Window Substring
- LeetCode Minimum Window Substring
- LeetCode : Minimum Window Substring
- [LeetCode] Minimum Window Substring
- [Leetcode] Minimum Window Substring
- Minimum Window Substring
- LeetCode: Minimum Window Substring
- Minimum Window Substring
- [LeetCode]Minimum Window Substring
- Minimum Window Substring
- Minimum Window Substring
- [leetcode]Minimum Window Substring
- Minimum Window Substring
- Leetcode:Minimum Window Substring
- LeetCode-Minimum Window Substring
- jQuery之选择器
- c语言(河内塔)
- jQuery之超详尽的DOM操作
- jQuery之动画操作
- jQuery之工具函数
- Leetcode76. Minimum Window Substring
- 拓展你的jQuery!
- 一点心得
- HTML5新元素canvas详解
- echarts散点图使用
- warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s inste
- 嵌套盒子,让子div在父div中居中
- 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
- 使用资源文件配置 Spring数据库连接