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

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

        

  • 相关阅读:
    cocoapods 命令
    开发常用
    ios 定位
    LoadingView
    自定义cell右侧 多按钮
    cocoaPods
    AFNetWorking
    iphone自定义铃声
    升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错(引用他人的)
    理解c语言中的指针
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13417329.html
Copyright © 2020-2023  润新知