Leetcode 76 Solution
This article provides solution to leetcode question 76 (minimum-window-substring)
Access this page by simply typing in "lcs 76" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/minimum-window-substring
Solution
class Solution {
public:
string minWindow(string s, string t) {
if (t.size() == 0)
return "";
int l = 0;
int r = 0;
int min_val = INT_MAX;
int min_l = -1;
int min_r = -1;
int expectCount[256] = {0};
int appearCount[256] = {0};
unordered_set<unsigned char> unmet_chars;
for (int i = 0; i < t.size(); i++)
{
unsigned char ch = (unsigned char)t[i];
unmet_chars.insert(ch);
expectCount[ch]++;
}
while (r < s.size())
{
unsigned char ch = (unsigned char)s[r];
appearCount[ch]++;
if (appearCount[ch] >= expectCount[ch])
unmet_chars.erase(ch);
unsigned char left_ch = (unsigned char)s[l];
while (appearCount[left_ch] > expectCount[left_ch] && l < r)
{
appearCount[left_ch]--;
left_ch = (unsigned char)s[++l];
}
if (unmet_chars.empty() && min_val > r - l + 1)
{
min_l = l;
min_r = r;
min_val = r - l + 1;
}
r++;
}
return min_l == -1 ? "" : s.substr(min_l, min_r - min_l + 1);
}
};