leetcode 76. 最小覆盖子串
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:
如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。
采用滑动窗口解答
class Solution { public: string minWindow(string s, string t) { string res = ""; int minn = s.length(); if (s.size() < t.size()) return res; vector<int> freq_p(256, 0); vector<int> freq_s(256, 0); int l = 0, r = 0; freq_s[s[r]]++; for (int i = 0; i<t.length(); i++) { freq_p[t[i]]++; } while (r<s.length()) { if (find(freq_s, freq_p)==1) { if ((r - l)<minn) { minn = r - l; res = s.substr(l, r - l + 1); } freq_s[s[l++]] --; } else{ r++; if (r >= s.length()) { break; } freq_s[s[r]] ++; } } return res; } int find(vector<int>& freq_s, vector<int>& freq_p) { for (int i = 0; i < 256; i++) if (freq_p[i] > freq_s[i]) return 0; return 1; } };