Total Accepted: 48185 Total Submissions: 241794 Difficulty: Hard
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S = "ADOBECODEBANC"
T = "ABC"
Minimum window is "BANC"
.
Note:
If there is no such window in S that covers all characters in T, return the empty string ""
.
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
class Solution { public: string minWindow(string s, string t) { int s_size = s.size(); int t_size = t.size(); vector<int> map(256,0); for(int i=0;i<t_size;i++){ map[t[i]]++; } int win_begin=0,win_end=0; int min_win = INT_MAX; int min_win_start = 0; int cnt = t_size; while(win_end < s_size){ if(map[s[win_end]]>0){ cnt--; } map[s[win_end]]--; win_end++; while(cnt==0){ if(win_end-win_begin < min_win){ min_win = win_end-win_begin; min_win_start = win_begin; } if(map[s[win_begin]]==0){ cnt++; } map[s[win_begin++]]++; } } return min_win == INT_MAX ? "":s.substr(min_win_start,min_win); } };
Next challenges: (H) Sliding Window Maximum