1. 程式人生 > 其它 >leetcode-雙指標-76. 最小覆蓋子串

leetcode-雙指標-76. 最小覆蓋子串

解析參考:非常詳細

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; } };