题目搬运者
https://leetcode-cn.com/problems/permutation-in-string/
【吃了没文化的亏】
给定两个字符串s1和s2,如果s2包含s1的排列则返回true,否则返回false。
换句话说,如果s1的排列中有一个是s2的子串,则返回true。
题意理解:此题说的是s2包含s1的排列,而排列不会改变字符串中每个字符的个数,所以只有当两个字符串每个字符的个数均相等时,一个字符串才是另一个字符串的排列。
吃了没文化的亏,没理解好s2包含s1的排列的意思,以为就是按子串顺序包含的关系,再不济按题目给的例子就是加个逆序。
思路 【双指针,滑动窗口】
思路是官方爸爸给的,但是自己用python写了一遍。到底还是要动手呀
- 循环一遍子串S1数组,记录字符个数
- 再循环一遍记录S1频数的数组,记录字符种类
- 先开始移动右边界,直到所有sub数组里的字符的种类都出现再了str数组的滑动范围里。
- 再判断此时的滑动范围是否和sub数组的长度一致;
不一致的话,移动左边界,再进行判断,左边界被删掉子串里是否是sub里的字符
若此时某个字符的频数不达标,strcount-=1 - 继续开始循环,交替移动左右指针
class Solution(object):
def checkInclusion(self, s1, s2):
"""
:type s1: str
:type s2: str
:rtype: bool
"""
# s1 子串 sub