LeetCode -- 567.字符串的排列

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。

换句话说,第一个字符串的排列之一是第二个字符串的子串。

示例1:

输入: s1 = “ab” s2 = “eidbaooo” 输出: True 解释: s2 包含 s1 的排列之一 (“ba”).

示例2:

输入: s1= “ab” s2 = “eidboaoo” 输出: False

注意:

输入的字符串只包含小写字母 两个字符串的长度都在 [1, 10,000] 之间

第一个最直接的方法是 列出S1的所有排列,一个个在S2中查找.这个时间复杂度O(n^n),并且字符串长度很长,不可行.
第二个方法滑动窗口法:
判读是否包含S1, 通过滑动窗口的方法,每次截取s2中和s1长度相等的子串,判断两个字符的数量是否一致.
如何统计? 由于只有26个英文字母,可以用计数排序来统计,创建一个长度为26的数组,下表0-25对应a-z,值为对应字母出现的次数.
判断条件: 先统计s1的字符数量count1,再统计s2中与之长度相等的子串的字符数量count2,比较两者是否相同.

参考: 字符串排列

发布了28 篇原创文章 · 获赞 5 · 访问量 4326

猜你喜欢

转载自blog.csdn.net/m0_37531129/article/details/103450823