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 指针才可以后移,来去掉窗口内不需要的元素;

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

        

  • 相关阅读:
    js对象方法
    重要的小知识点
    vs2017引用vue组件中文乱码
    单行文本溢出打点、多行文本溢出打点
    span和input布局时对不齐
    在思科三层交换机上配置DHCP,不同网段/VLAN间互通
    搭建ssm整合
    使用Redis
    MyBatis常用实现方式
    Java 面向对象
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13417329.html
Copyright © 2011-2022 走看看