Day 62
第567题:
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
1、看示例可知,判断s2是否包含一个字符串,这个字符串内只有s1内的字符,顺序可打乱;
如果含有其他的字符说明不符合,返回false,如果一直这个字符串内包含所有s1的字符,那么只需要判断这个字符串内元素个数是否等于s1的长度即可;
可以用两个指针 left right 来实现滑动窗口判断s2是否包含s1的排列;
用valid来保存滑动窗口内的字符是否满足s1内字符的数量要求;
然后当滑动窗口长度等于s1长度时,判断valid和存储s1的哈希表key比较,相等说明各种字母都有且数量满足,返回true;
否则返回false。
第438题:
给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。
字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。来源:力扣(LeetCode)
说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。
1、上面那题是寻找s2中是否存在s1的排列,这道题是找字母异位词,也就是字母相同排泄不同的字符串,返回这个子串的起始索引;
那么只需要在上面的代码上加一个结果集,然后每次都将符合的子串的起始索引加到结果集即可;
最后返回结果集。