1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: bool isCover(int *recs, int *rect) { for (int i = 'a'; i <= 'z'; i++) { if (recs[i] < rect[i]) return false; } for (int i = 'A'; i <= 'Z'; i++) { if (recs[i] < rect[i]) return false; } return true; } string minWindow(string s, string t) { string ans = ""; int rect['z'+1]{}; int recs['z'+1]{}; for (const char &c : t) { rect[c]++; } int left = 0; int ans_left = -1, ans_right = s.size(); for (int right = 0; right < s.size(); right++) { recs[s[right]]++; while(isCover(recs, rect)) { if ((ans_right-ans_left)>(right-left)) { ans_left = left; ans_right = right; } recs[s[left]]--; left++; } } return ans_left==-1?"":s.substr(ans_left, ans_right-ans_left+1); } };
|