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的排列,这道题是找字母异位词,也就是字母相同排泄不同的字符串,返回这个子串的起始索引;

  那么只需要在上面的代码上加一个结果集,然后每次都将符合的子串的起始索引加到结果集即可;

  最后返回结果集。

  

  



原文地址:https://www.cnblogs.com/liang-yi-/p/13623045.html