题解 | #最小覆盖子串#

最小覆盖子串

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

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param S string字符串 
# @param T string字符串 
# @return string字符串
from itertools import combinations
import traceback
class Solution:
    def minWindow(self , S: str, T: str) -> str:
        # write code here
        try:
            if len(S) < len(T):
                return ''
            if len(S) == len(T):
                if S == T:
                    return S
                else:
                    return ''
            l = 0
            r = 0
            res = ''
            best_count = float('inf')
            T_map = {}
            for _ in T:
                if _ in T_map:
                    T_map[_] += 1
                else:
                    T_map[_] = 1
            
            match_map = {}
            lenght_T_map = len(T_map) # 需要匹配的单词数,包含重复的:如AA,计数1
            n = 0 # 表示已经匹配的单词数


            while r < len(S):
                # w = S[l:r+1]
                # 核心难点T中存在多个重复字母,如:AA,需要在窗口中匹配多次AA,才能做匹配计数+1
                r_s = S[r]
                if r_s in T:
                    if r_s in match_map:
                        match_map[r_s] += 1
                    else:
                        match_map[r_s] = 1
                    if match_map[r_s] == T_map[r_s]:
                        n += 1

                while  n == lenght_T_map:
                    l_s = S[l]
                    w = S[l:r+1]
                    if len(w) <= best_count:
                        res = w
                        best_count = len(w)
                    if l_s in T:
                        match_map[l_s] -= 1
                        if match_map[l_s] < T_map[l_s]:
                            n -= 1
                    l += 1


                r += 1
            return res


        except:
            print(traceback.format_exc())

全部评论

相关推荐

家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
06-23 17:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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