题解 | #最小覆盖子串#

最小覆盖子串

https://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac

using System;
using System.Collections.Generic;


class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param S string字符串 
     * @param T string字符串 
     * @return string字符串
     */
    public string minWindow (string S, string T) {
        int left = 0, right = 0;
        Dictionary<char, int> dic = new Dictionary<char, int>();
        for(int i = 0; i < T.Length; i++){
            if(!dic.ContainsKey(T[i])) dic[T[i]] = 0;
            dic[T[i]]++;
        }
        int need = 0;
        int start = 0;
        int len = S.Length + 1;
        while(right < S.Length){
            //Console.WriteLine("right:"+right);
            if(dic.ContainsKey(S[right])){
                if(--dic[S[right]] == 0) need++;
            }
            while(need == dic.Count){
                if(right - left + 1 < len){
                    start = left;
                    len = right - left + 1;
                }
                if(dic.ContainsKey(S[left])){
                    if(dic[S[left]]++ == 0) need--;
                    //Console.Write("left:"+left+"need:"+need);
                }
                left++;
            }
            right++;
        }
        if(len == S.Length + 1) return "";
        return S.Substring(start, len);
    }
}

全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务