Leetcode 76. 最小覆盖子串 java题解 滑动窗口思想

该题通过滑动窗口思想解决,找到包含字符串T所有字母的最小子串。初始化子串左右端点i和j,向右移动j并记录字母,判断子串是否包含T所有字母。如果是,则移动i并继续判断,直到找到唯一答案。
摘要由CSDN通过智能技术生成

先贴一下题目:

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

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

说明:

  • 如果 S 中不存这样的子串,则返回空字符串 “”。
  • 如果 S 中存在这样的子串,我们保证它是唯一的答案。

思路:
该题如用暴力解法,复杂度可达O( n 3 n^3 n3),数据量稍大就gg

看题意,我们的目的是要在一个字符串中寻找满足要求的一个最小子串

看到这种求最小子串问题我们下意识可以尝试采用滑动窗口的方法来解决。


思路:

取变量i,j分别表示子串左右端点。
1.将右端点j向右移动,并记录当前j所在的字母。
2.每次判断当前子串是否包含T中所有的字母。如果已全部包含,则进入步骤3;若还未全部包含,继续回到步骤1。
3.将子串左端点向右移动,并记录当前i所在的字母。
4.每次判断当前子串是否仍然包含T中所有的字母。若仍然全部包含,则继续步骤3;若已经未全部包含,回到步骤1。


接下来附上java代码实现:

public String minWindow(String s, String t) {
   

        //定义两个数组记录两个字符串中各个字符的数量
        int[] fre1 = new int[256];
        int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值