zoukankan      html  css  js  c++  java
  • 76. 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 empty string "".

    If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.

       public string MinWindow(string s, string t) {
            if(t==null || t == "" || s == "") return t;
            if(t.Length > s.Length) return "";
            int max =s.Length+1;
            var res ="";
            var hashtable = new Dictionary<char,int>();
            int min =s.Length;
            for(int i =0;i< t.Length;i++)
            {
                if(hashtable.ContainsKey(t[i])) hashtable[t[i]]++;
                else hashtable.Add(t[i],1);
            }
            
            for(int i = 0;i<=s.Length - t.Length;i++)
            {
                var exist = new Dictionary<char,int>();
                int count =0;
                for(int j = i;j<s.Length;j++)
                {
                    if(max < j-i+1) break;
                    if(hashtable.ContainsKey(s[j]))
                    {
                        if(exist.ContainsKey(s[j]))
                        {
                            if(exist[s[j]] < hashtable[s[j]])
                            {
                                count++;
                                exist[s[j]]++;
                                if(count >= t.Length)
                                {
                                    if(max > j-i+1) {res =s.Substring(i,j-i+1);max = j-i+1;}
                                    break;
                                }
                            }
                        }
                        else
                        {
                            count++;
                            exist.Add(s[j],1);
                            if(count >= t.Length) 
                            {
                                if(max > j-i+1) {res =s.Substring(i,j-i+1);max = j-i+1;}
                                    break;
                            }
                        }
                    }
                }
            }
            return res;
        }
    public string MinWindow(string s, string t) {
            if(t==null || t == "" ||s==mull|| s == "") return t;
            if(t.Length > s.Length) return "";
            int max =s.Length+1;
            var res ="";
            var hashtable = new Dictionary<char,int>();
            for(int i =0;i< t.Length;i++)
            {
                if(hashtable.ContainsKey(t[i])) hashtable[t[i]]++;
                else hashtable.Add(t[i],1);
            }
            
            int left =0;
            int right =-1;
            int count = 0;
            while(right<s.Length)
            {
                if(count == t.Length)
                {
                    if(max > right - left + 1)
                    {
                        max= right - left + 1;
                        res = s.Substring(left,right - left + 1);
                    }
                    if(hashtable.ContainsKey(s[left]))
                    {
                        if(hashtable[s[left]] ==0)  count--;
                        hashtable[s[left]]++;
                       
                    }
                   
                    left++;
                }
                else if(right<s.Length-1)
                {
                    right++;
                    if(hashtable.ContainsKey(s[right]) )
                    {
                        if(hashtable[s[right]]>0) count++;
                        hashtable[s[right]]--;
                    }
                }
                else right++;
                
            }
            return res;
    
        }
  • 相关阅读:
    windows 核心编程 第2章 U n i c o d e
    在一个类内不可以定义自身类的对象,为什么定义自身类的静态对象又是正确的
    将JPG图片绘制在对话框背景上:(这段代码绝对可以执行)
    小技巧给CEdit设置字体
    惠普 升级两年保修
    DoModal返回1,对话框不能显示,今天碰到项目在用unicode编码,和多字符编码时候出现的
    MFC 绘图
    CString类所有成员函数详解
    mysql 一些问题
    错误:不能实例化抽象类
  • 原文地址:https://www.cnblogs.com/renyualbert/p/5911355.html
Copyright © 2011-2022 走看看