zoukankan      html  css  js  c++  java
  • Leetcode 76 最小覆盖字串 (滑动窗口)

    题目描述:

     题解:需要遍历所有可能的字串进行求解,采用滑动窗口的方法进行处理。

    滑动窗口常规步骤:

    1 .初始,left指针和right指针都指向S的第一个元素.

    2. 将 right指针右移,扩张窗口,直到得到一个可行窗口,亦即包含T的全部字母的窗口。

    3. 得到可行的窗口后,将left指针逐个右移,若得到的窗口依然可行,则更新最小窗口大小。

    4. 若窗口不再可行,则跳转至 2。

    本题用一个hash数组flag记录t中每个元素出现的次数。给定一个窗口(l,r)。

    在向右滑动的过程中,对于right指向的元素tmp,如果flag[tmp-'A'] >0.count++,随之flag[tmp-'A']++;

    在收缩的过程中,对于left指向的元素tmp,flag[tmp-'A']++,当flag[tmp-'A']>0的时候,count--;

    重复上述过程即可;

    AC代码:

       int flag_t[270];
        string minWindow(string s, string t) {
            int Lent = t.length();
            int Lens = s.length();
            int r = 0;
            int l = 0;
            int mn = INT_MAX;
            string ans = "";
            int count = 0;
            
            memset(flag_t,0,sizeof(flag_t));
            for(int i=0;i<Lent;i++) flag_t[t[i]-'A']++;
            while(r < Lens)
            {
                while(count != Lent && r<Lens)
                {
                    if(flag_t[s[r]-'A'] > 0) count++;
                    flag_t[s[r]-'A'] --;
                    r++;
                }
               
                if(r >= Lens && count !=Lent ) return ans;
                while(count == Lent && l<=r)
                {
                    flag_t[s[l]-'A']++;
                    if(flag_t[s[l]-'A'] > 0) count--;
                    l++;
                }
                
                int tmp_len = max(r-1,l-1)-min(r-1,l-1)+1;
                if(mn > tmp_len) 
                {
                    mn = tmp_len;
                    ans = s.substr(l-1,tmp_len);
                }
            }
            return ans;
        }
  • 相关阅读:
    git this exceeds GitHub's file size limit of 100.00 MB
    使用vue-cli创建vue工程
    【转】Visual Studio Code必备插件
    linux安装openssl
    Centos7离线安装mysql8
    使用nmon来按频率采集数据
    Mac下编译android4.0.4遇到的问题
    32位ubuntu16.4编译android4.1.1
    vmvare安装vmtools菜单灰色
    Substrate 使用
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12269179.html
Copyright © 2011-2022 走看看