leetcode-雙指標-76. 最小覆蓋子串
阿新 • • 發佈:2021-08-10
解析參考:非常詳細
https://blog.csdn.net/weixin_45629285/article/details/118674829
class Solution { public: string minWindow(string s, string t) { unordered_map<char,int> s_map; unordered_map<char,int> t_map; for(int i = 0; i < t.size(); i++){ t_map[t[i]]++; }int cnt = 0; string res; for(int i = 0, j = 0; i < s.size(); i++){ s_map[s[i]]++; // 如果s_map[s[i]]<=t_map[s[i]],說明是t中必需元素,所以cnt++, // 如果不是t中元素,s_map[s[i]]肯定大於t_map[s[i]],因為t_map[s[i]]為0 if(s_map[s[i]]<=t_map[s[i]]) cnt++; while(s_map[s[j]]>t_map[s[j]]) s_map[s[j++]]--; // 在使j++縮小視窗的同時,應該更新s_map // 如果是第一次或者本次視窗小於之前的視窗大小,更新res。 if(cnt==t.size()){ if(res.size()==0||(i-j+1)<res.size()) res = s.substr(j,i-j+1); }// 下次for迴圈從本次結束為止下一位開始, //cout<<"i: "<<i<<" "<<j<<" "<<cnt<<" "<<res<<endl; } return res; } };