题解 | #最小覆盖子串#

最小覆盖子串

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);
    }
}

全部评论

相关推荐

01-14 19:01
吉首大学 Java
黑皮白袜臭脚体育生:加个项目吧,一般需要两个项目一业务一轮子呢,简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务