[滑动窗口] leetcode 76 Minimum Window Substring

故事扮演 提交于 2019-11-27 00:39:53

problem:https://leetcode.com/problems/minimum-window-substring/

        滑动窗口题。维护一个包含t中所有字符的最小滑动窗口,首先用一个hashmap记录所有t中的字符和出现次数,在s中每遇到一次计数器加一,找到了符合条件的窗口后,尝试向右移动窗口左指针,直到恰好能够满足条件为止。更新当前最小滑动窗口。

class Solution {
public:
    string minWindow(string s, string t) 
    {
        vector<int> dstChar(256,0);
        for(auto c: t) 
        {
            dstChar[c]++;
        }
        
        string res;
        int count = t.size();
        int begin = 0;
        for(int i = 0;i < s.size(); i++) // end
        {
            dstChar[s[i]]--;
            if(dstChar[s[i]] >= 0)
            {
                count--;
            }
            
            if(count == 0)
            {
                while(dstChar[s[begin]] + 1 <= 0)
                {
                    dstChar[s[begin]]++;
                    begin++;
                }
                int len = i - begin + 1;
                if(res.empty() || len < res.size())
                {
                    res = s.substr(begin, len);
                }
            }
        }
        return res;
    }
};

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!