leetcode_076 Minimun Window Substring
来源:互联网 发布:java swing选择控件 编辑:程序博客网 时间:2024/06/08 17:22
题目分析:在字符串S中选一个长度最短的子串,使得子串包含所有的字母,要求时间复杂度为O(n),空间复杂度为O(1)。
解题思路:
双指针实现,具体如下:
尾指针不断向后扫描,当遇到一个窗口包含所有T的字符,则收缩头指针,直到不能收缩头指针为止。
1)定义两个数组,分别用来统计T字符串中每个字母的个数和当前找到T中每个字母的个数;
2)一边遍历S字符串,判断S字符串中是否有T的字母,有则将此位置保存到队列中,更新此字符在找
到的次数;
3)在2)的基础上,依据情况,更新或不更新子串中找到T中的字母数目;
4)依据3)更新后找到T中的字母数判断是否需要收缩头指针;
5)在4)的基础上,若收缩了头指针,则判断当前子串长度是否小于之前的子串长度,小则更新,否
则不变。
6)最后根据头指针是否为-1输出最后的结果。若为-1,则未找到包含字符串T的子串,返回空,否则
返回子串。
class Solution{public:string minWindow(string s, string t){int slen = s.length();int tlen = t.length();queue<int> Q;int srccnt[256] = {0}; //统计T中每个字母的个数 int foundcnt[256] = {0}; //当前找到T中每个字母的个数 for (int i = 0; i < tlen; i++)srccnt[t[i]]++; int hasfound = 0; //已经找到的字母数目int winstart = -1;int winend = slen;// 遍历字符串S for (int i = 0; i < slen; i++){if (srccnt[s[i]] != 0){Q.push(i);foundcnt[s[i]]++;// 记录截止目前,找到子串T中的字母个数 if (foundcnt[s[i]] <= srccnt[s[i]])hasfound++;// 当找到tlen时,进行收缩 if (hasfound == tlen){//找到一个满足的窗口int k;do{//缩减窗口到最小k = Q.front();Q.pop();foundcnt[s[k]]--; } while (srccnt[s[k]] <= foundcnt[s[k]]);// 判断当前情况下子串长度是否为更小,更小则更新,否则不变 if (winend - winstart > i - k){winstart = k;winend = i;}hasfound--; } }} return winstart != -1 ? s.substr(winstart, winend - winstart + 1) : "";}};
0 0
- leetcode_076 Minimun 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
- [leetcode] Minimum Window Substring
- [leetcode] Minimum Window Substring
- C# 使用 doggleReport 生成pdf报表
- 自定义控件基础 requestLayout()和invalidate()区别
- 深入理解Java之反射
- Shell 命令重定向输出
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- leetcode_076 Minimun Window Substring
- ffmpeg 音频使用流程
- 七、初学servlet之重定向与转发
- 我与即时通讯 - ID 设计
- 排序算法白话实现
- 八、初学servlet之config与context
- Myeclipse怎么导入工程项目
- 1004 - Monkey Banana Problem (dp)
- sort()函数的简单使用