leetcode727
最小窗口子序列
题目描述
给定字符串
s1和s2,找出s1中最短的连续 子串,使得s2是该子串的 子序列 。
如果
s1中没有窗口可以包含s2中的所有字符,返回空字符串""。如果有不止一个最短长度的窗口,返回 开始位置最靠左 的那个。
示例 1
1 | 输入: |
示例 2
1 | 输入:s1 = "jmeqksfrsdcmsiwvaovztaqenprpvnbstl", s2 = "u" |
解题思路
用滑动窗口去做,遍历 s1 串,如果 s2 到了末尾(p2 == l2),进行回溯寻找起点。
代码实现
1 | class Solution { |
注意点
- 因为先做
p2++,所以末尾的判断条件是p2 == l2,而不是p2 == l2 - 1,此时p1还没加 1,还在最后一个字符位置。 - 进行回溯后,
p1指向的位置是第一个字符的前一个位置,所以要加 1。 - 要维护一个
min变量,判断这个长度是不是最小的,如果是,就动态更新res的值。 - 因为
p1的坐标进行了回溯,最后又加 1 了,所以下一次遍历是从s1的下一个字符开始的。s1确实需要进行遍历,因为要找到最小的子串。
leetcode727