LeetCode_Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
 
For example,
S = "ADOBECODEBANC"
T = "ABC"
 
Minimum window is "BANC".
 
Note:
If there is no such window in S that covers all characters in T, return the emtpy string "".
 
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.

分析: 双指针,动态维护一个区间。尾指针不断往后扫,当扫到有一个窗口包含了所有T的字符后,然后再收缩头指针,直到不能再收缩为止。最后记录所有可能的情况中窗口最小的

复制代码
class Solution {
public:
    string minWindow(string S, string T) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<int> expect(256, 0);
        vector<int> appear(256, 0);
        int count = 0; 
        int start = 0;
        int minstart= 0;
        int minLen = INT_MAX;
        
        for(int i = 0; i < T.size(); i++)expect[T[i]]++;
        
        for(int  i = 0; i < S.size() ; i++)
        {
            if(expect[S[i]] > 0){
                appear[S[i]]++;
                if(appear[S[i]] <= expect[S[i]])
                    count++;
            }
            if(count == T.size()){
                while(expect[S[start]] == 0 || appear[S[start]] > expect[S[start]]){
                    appear[S[start]]--;
                    start++;
                }
                if(minLen > (i - start +1) ){
                    minLen = i - start + 1 ;
                    minstart = start;
                }
            }
        }
        
        if(minLen == INT_MAX) return string("");
        
        return S.substr(minstart, minLen);    
    }
};
复制代码

 

posted @   冰点猎手  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
点击右上角即可分享
微信分享提示