zoukankan      html  css  js  c++  java
  • [Leetcode]@python 76. Minimum Window Substring

    题目链接

    https://leetcode.com/problems/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".

    题目大意

    给定字符串s和t,要在s中找到一个最小的窗口,其中出现了所有t中的字符

    解题思路

    t中的字符可能为重复字符,需要先用字典记录每次字符出现的次数;要判断窗口中是否出现了所有字符,首先需要两个指针表示窗口的位置,尾指针不断往后扫,当扫到有一个窗口包含了所有T的字符,然后再收缩头指针,直到不能再收缩为止。最后记录所有可能的情况中窗口最小的。

    代码

    class Solution(object):
        def minWindow(self, s, t):
            """
            :type s: str
            :type t: str
            :rtype: str
            """
            count1 = {}
            count2 = {}
            for char in t:
                if char not in count1:
                    count1[char] = 1
                    count2[char] = 1
                else:
                    count1[char] += 1
                    count2[char] += 1
    
            count = len(t)
    
            start = 0
            minSize = len(s) + 1
            minStart = 0
    
            for end in range(len(s)):
                if s[end] in count2 and count2[s[end]] > 0:
                    count1[s[end]] -= 1
                    if count1[s[end]] >= 0:
                        count -= 1
                    if count == 0:
                        while True:
                            if s[start] in count2 and count2[s[start]] > 0:
                                if count1[s[start]] < 0:
                                    count1[s[start]] += 1
                                else:
                                    break
                            start += 1
                        if minSize > end - start + 1:
                            minSize = end - start + 1
                            minStart = start
            if minSize < len(s) + 1:
                return s[minStart:minStart + minSize]
            else:
                return ''    
    
  • 相关阅读:
    为什么不要用VSCODE来写Makefile
    JavaFX第三弹
    javaFX文件和文件夹选择器
    写了一个vsftpd的GUI
    在java中调用shell命令和执行shell脚本
    正交投影与斯密特正交化的好处
    Linux下安装软件
    C++中的仿函数
    C++中重载操作符[ ]
    使用斐波那契查找
  • 原文地址:https://www.cnblogs.com/slurm/p/5160037.html
Copyright © 2011-2022 走看看