题目描述
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
示例 1:
示例 2:
提示:
- 1 <= s1.length, s2.length <= 104
- s1 和 s2 仅包含小写字母
题目解析
和子数组/子字符串相关的题目,很可能就是要考察滑动窗口算法,往这方面思考就行了。
这道题,相当于你一个 S 和一个 T,请问你 S 中是否存在一个子串,包含 T 中所有字符且不包含其他字符?
如果这样想的话就和 76. 最小覆盖子串 有些类似了。
参考代码
以下为 Java 代码。
复杂度分析
- 时间复杂度:O(n+m+∣Σ∣),其中 n 是字符串 s1的长度,m 是字符串 s2 的长度,Σ 是字符集,这道题中的字符集是小写字母,∣Σ∣=26。
- 空间复杂度:O(∣Σ∣)。

