每天一道LeetCode-----在字符串s中找到最短的包含字符串t中所有字符的子串,子串中字符顺序无要求且可以有其他字符

在给定的字符串s中寻找最短的子串,该子串包含目标字符串t的所有字符,字符顺序无要求,且允许有其他字符。问题的关键在于动态调整滑动窗口的大小,并在满足条件时更新最短子串。通过维护一个记录窗口中字符缺失情况的容器,并使用计数器跟踪缺少的字符数,最终找到符合条件的最短子串。
摘要由CSDN通过智能技术生成

Minimum Window Substring

原题链接Minimum Window Substring

这里写图片描述

要求在源字符串s中找到长度最短的子串,这个子串包含目标字符串t中的所有字符,字符顺序没有要求。

注意在找到的子串中可以包含t中没有的字符。

乍一看是滑动窗的问题,如果题目要求是”在s中找到子串t,t中字符顺序无要求”,那么只需要维护一个长度为t的大小的滑动窗遍历s即可,这种做法要求找到的子串长度就是t的长度,且无其他t中没有的字符。

但是难点在本题可以存在t中没有的字符,比如示例中找到的子串是”BANC”,其中”BAC”是t,而’N’不属于t。所以,滑动窗的大小是需要动态变化的。


根据滑动窗的概念,解决问题时需要两个指针begin和end分别指向窗口的左边界和右边界,在向右移动的过程中右边加,左边减,直到满足条件即可。

但是,由于本题的滑动窗大小不固定,所以在向右移动的过程中,只能右边加,而不能左边减。只有当窗口此时覆盖的区域包含t时&#x

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值