题解 | #表达式求值#

最小覆盖子串

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

建立一个字典,记录T中字符出现的次数。然后放大(滑动)窗口,当字典里的次数全都小于0的时候,进行窗口缩小;直到缩小的出现字典某个字符大于0的情况,此时,继续放大窗口。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param S string字符串 
# @param T string字符串 
# @return string字符串
#
class Solution:
    def minWindow(self , S: str, T: str) -> str:
        # write code here
        start = 0
        end = 0
        hash_dic = dict()
        match = len(T)
        res_start = -1
        res_end = -1
		#初始化HASH
        for i in range(match):
            if T[i] not in hash_dic:
                hash_dic[T[i]] = 1
            else:
                hash_dic[T[i]] += 1
        #放大窗口
		while end < len(S):
            if S[end] in hash_dic:
                hash_dic[S[end]] -= 1
                if hash_dic[S[end]] >=0:
                    match -= 1
			#当匹配HASH中的所有数都小于等于0,开始缩小窗口
            while match == 0:
            	#缩小的过程,记录最优长度
                if (res_end==-1 and res_start==-1) or (end - start + 1 < res_end - res_start + 1):
                    res_start = start
                    res_end = end
                if S[start] in hash_dic:
                    hash_dic[S[start]] += 1
                    if hash_dic[S[start]] > 0:
                        match += 1
                start += 1
            end += 1
        if res_start == -1 or res_end == -1:
            return ""
        return S[res_start:res_end+1]
                    
                
        
全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务