最小覆盖子串 -- 滑动窗口
目录
一:题目
二:算法原理分析
三:代码实现
一:题目
题目链接:76. 最小覆盖子串 - 力扣(LeetCode)
二:算法原理分析
三:代码实现
class Solution {
public:
string minWindow(string s, string t)
{
int len = INT_MAX;
int ret = 0;
int hash1[128];//统计字符t出现的频次
int hash2[128];//统计窗口内出现的频次
int kinds = 0;//统计有效字符的种类
for (auto e : t)
{
if(hash1[e]++ == 0)
kinds++;
}
for (int left = 0, right = 0, cont = 0; right < s.size(); right++)
{
//进窗口
//维护cont:有效字符的种类
if (++hash2[s[right]] == hash1[s[right]])
cont++;
//判断
while (cont == kinds)
{
if(right-left+ 1 < len)
{
len = right - left +1;
ret = left;
}
//出窗口 + 维护cont
if (hash2[s[left]]-- == hash1[s[left]])
cont--;
left++;
}
}
string st;
if (len == INT_MAX)
return st;
st = s.substr(ret,len);
return st;
}
};