最小覆盖子串
编号:0017
题目来源:leetcode
试题描述
给定一个字符串S
,一个字符串T
,请在字符串S
中找出包含T
所有字符的最小子串
- 如果
S
中不存在这样的子串,则返回空字符串""
- 如果
S
中存在这样的子串,测试用例保证它是唯一的答案
解答算法
算法思路
这道题用到的还是滑动窗口算法。简单的来说,就是维护两个指针begin
和end
,先移动end
,当能够满足begin
和end
中子串满足条件的时候,停止移动end
,转而移动begin
,如果移动之后产生的子串不满足条件了,那么移动之前的子串就是可能的最短字串,否则继续移动begin
。当移动之后不满足,继续重复上述过程。
实现代码
class Solution {
public:
unordered_map <char, int> ori, cnt; //map存储了对应的子串和目标串的各个字母的个数
//cnt存储的是窗口子串,ori存储的是目标串
bool check() {
//判断当前子串是否满足条件
for (const auto &p: ori) {
//对于ori中每个元素都进行遍历
if (cnt