zoukankan      html  css  js  c++  java
  • Day 35

    第76题:

    给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。来源:力扣(LeetCode)

    示例:

    输入: S = "ADOBECODEBANC", T = "ABC"
    输出: "BANC"

    说明: 如果 S 中不存这样的子串,则返回空字符串 ""。

        如果 S 中存在这样的子串,我们保证它是唯一的答案。

    1、如果使用暴力解法,遍历s,求出s的所有子串;

      将s的所有子串和t字符串来比较,得出包含t内所有字符的子串;

      然后再比较这些子串,得出最小子串。这样多出来许多没必要的比较;

      例如有一段很长的子串(abcdddfg)包含了t(cfg),但是这个子串的后面的部分(cdddfg)其实已经包含了t(cfg);

      那说明这整个子串(abcdddfg)其实是不用来比较的,而且(bcdddfg)这个子串也不必和t来比较;

    2、所以就可以用滑动窗口来获取 s 里面的最小覆盖字串;

      定义两个指针 left 和 right 来指定窗口大小,当right<s.length()+1时,一直执行;

      首先窗口内必须包含 t 内所有字符(就是right一直后移,直到窗口内包含了 t 内的所有字符);

      只有当窗口内包含所有 t 内字符时,left 指针才可以后移,来去掉窗口内不需要的元素;

      然后这样求出最小的覆盖子串,得出结果

        

  • 相关阅读:
    在 ML2 中 enable local network
    实践 Neutron 前的两个准备工作
    配置 linux-bridge mechanism driver
    为 Neutron 准备物理基础设施(II)
    两张图总结 Neutron 架构
    Service Plugin / Agent
    详解 ML2 Core Plugin(I)
    #define用法集锦[修正版]
    socketpair理解
    判断单链表是否存在环,判断两个链表是否相交-的相关讨论
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13417329.html
Copyright © 2011-2022 走看看