#include "s0076_minimum_window_substring.hpp" bool S0076::check() { for (const auto &p : ori) { if (cnt[p.first] < p.second) { return false; } } return true; } // 不包含 t 中所有字符,r 右移 // 包含 t 中所有字符,l 右移 string S0076::minWindow(string s, string t) { for (const auto &c : t) { ++ori[c]; } int l = 0, r = -1; int len = INT_MAX, ansL = -1, ansR = -1; while (r < int(s.size())) { if (ori.find(s[++r]) != ori.end()) { ++cnt[s[r]]; } while (check() && l <= r) { if (r - l + 1 < len) { len = r - l + 1; ansL = l; } if (ori.find(s[l]) != ori.end()) { --cnt[s[l]]; } ++l; } } return ansL == -1 ? string() : s.substr(ansL, len); }