leetcode 76.Minimum Window Substring

尺取法


题意:

给出字符串s和t,求s的最小子串,使得子串的字符集合包含t的字符集合.

这个包含还要考虑同一字符的数量,例如a并不包含aa.


思路:

尺取法套路又来了.

思路是枚举左端点,往右跑最短的长度,使得子串包含t.暴力的话,复杂度O(n2).

尺取法是两个下标i,j.i往右走一格,然后j往右一直走,直到满足条件.然后更新答案,再i往右走一格...

由于i和j最多往右走n格,因此总体时间复杂度是O(n).

至于如何判断是否满足条件,可以先统计字符串t每个字符的个数,然后算法过程中维护尺子的每个字符的个数.

同时要维护尺子里"有效字符"的数量,当它等于t的size时就是满足条件.(当这个字符在t里出现,并且还未够数量时才算有效)


关于尺取法的正确性,假设有两个满足条件的尺子,它们的左右下标分别是L1,R1,L2,R2.

只要L1<L2,那么必有R1<=R2.因此那个j一直往右跑即可,不用回头.

反过来说,只要满足"L1<L2 -> R1<=R2"的性质,就可以直接上尺取法这个套路.


总结:

尺取法,过程中维护尺子有效字符的数量.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值