今天是不同的类型,话说定长滑动窗口中,经常会出现这样一类题目,给你两个串,一个串的排列可能是另一个串的子串,让你求出子串开始的位置,或者证明是否存在这样的子串。
一.热身阶段
力扣567.字符串的排列
题目:
给你两个字符串 s1
和 s2
,写一个函数来判断 s2
是否包含 s1
的 排列。如果是,返回 true
;否则,返回 false
。
换句话说,s1
的排列之一是 s2
的 子串 。(s1和s2只包含小写字母)
示例:
输入:s1 = "ab" s2 = "eidbaooo" 输出:true 解释:s2 包含 s1 的排列之一 ("ba").
这时候就有兄弟会问了,这咋用模板呢,s1的排列这么多个,我难道要一个一个列出来吗,主播有什么简单的方法吗?有的兄弟有的,我们可以化整为零嘛,s1字符串说到底是由k(s1的大小)个字符组成的,那么我们就可以用一个数组维护s1的字符以及对应的数量,这一样一来我们就将问题转换为窗口中字符以及对应的数量是否和s1相同即可。细节上,我们将s1存在的字符在数组中+1,入窗时,将字符在数组中-1,最终看数组中的元