自学内容网 自学内容网

【每日刷题】Day126

【每日刷题】Day126

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

1. LCR 017. 最小覆盖子串 - 力扣(LeetCode)

//思路:滑动窗口 + 哈希表。

//一张图理解

class Solution {

public:

    string minWindow(string s, string t)

    {

        string ans, tmp;

        int flag1 = 0,flag2 = 0;

        int hash1[128] = { 0 };

        int hash2[128] = { 0 };

        for (auto c : t)

        {

            hash1[c]++;

            if(hash1[c]==1) flag2++;

        }

        for(int left = 0,right = 0;left<s.size(),right<s.size();right++)

        {

            tmp.push_back(s[right]);

            if(hash1[s[right]])

            {

                hash2[s[right]]++;

                if(hash2[s[right]]==hash1[s[right]]) flag1++;

            }

            while(flag1==flag2)//有效字符串

            {

                if(ans=="") ans = tmp;//更新结果

                else ans = ans.size()<tmp.size()?ans:tmp;

                if(hash2[s[left]]&&hash2[s[left]]==hash1[s[left]]) flag1--;

                hash2[s[left]]--;

                left++;

                tmp.erase(0,1);

                while(left<s.size()&&!hash1[s[left]])//定位到下一个有效字符位置

                {

                    left++;

                    tmp.erase(0,1);

                }

            }

        }

        return ans;

    }

};


原文地址:https://blog.csdn.net/2301_78022459/article/details/142359517

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!