Leetcode学习笔记(76. 最小覆盖子串)

在这里插入图片描述
滑动窗口加HASH表:

class Solution {
private:
	map<char, int> data;
	bool check(map<char, int> &data) {
		map<char, int>::iterator it;
		for (it = data.begin(); it != data.end(); it++) {
			if (it->second > 0)
				return false;
		}
		return true;
	}

public:
	string minWindow(string s, string t) {
        if(t.size()>s.size())
            return "";
		int out = 0, len = INT_MAX;
		for (char temp : t)
			data[temp] += 1;
		int left = 0, right = 0;
		while (right<s.size()) {
			if (data.find(s[right]) != data.end())
				data[s[right]] -= 1;
			if (!check(data))
				right++;
			else {
				while (check(data)) {
					if (data.find(s[left]) != data.end())
						data[s[left]] += 1;
					left++;
				}
				if ((right - left + 2)<len) {
					out = left - 1;
					len = right - left + 2;
				}
				right++;
			}
		}
        if(len!=INT_MAX)
		    return s.substr(out, len);
        else
            return "";
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值