Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.
In other words, return true if one of s1's permutations is the substring of s2.
Example 1:
Input: s1 = "ab", s2 = "eidbaooo"
Output: true
Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input: s1 = "ab", s2 = "eidboaoo"
Output: false
Constraints:
1 <= s1.length, s2.length <= 104
s1 and s2 consist of lowercase English letters.
Solutions
Solution 1: Sliding Window
We use an array \(\textit{cnt}\) to record the characters and their counts that need to be matched, and a variable \(\textit{need}\) to record the number of different characters that still need to be matched. Initially, \(\textit{cnt}\) contains the character counts from the string \(\textit{s1}\), and \(\textit{need}\) is the number of different characters in \(\textit{s1}\).
Then we traverse the string \(\textit{s2}\). For each character, we decrement its corresponding value in \(\textit{cnt}\). If the decremented value equals \(0\), it means the current character's count in \(\textit{s1}\) is satisfied, and we decrement \(\textit{need}\). If the current index \(i\) is greater than or equal to the length of \(\textit{s1}\), we need to increment the corresponding value in \(\textit{cnt}\) for \(\textit{s2}[i-\textit{s1}]\). If the incremented value equals \(1\), it means the current character's count in \(\textit{s1}\) is no longer satisfied, and we increment \(\textit{need}\). During the traversal, if the value of \(\textit{need}\) equals \(0\), it means all character counts are satisfied, and we have found a valid substring, so we return \(\text{true}\).
Otherwise, if the traversal ends without finding a valid substring, we return \(\text{false}\).
The time complexity is \(O(m + n)\), where \(m\) and \(n\) are the lengths of strings \(\textit{s1}\) and \(\textit{s2}\), respectively. The space complexity is \(O(|\Sigma|)\), where \(\Sigma\) is the character set. In this problem, the character set is lowercase letters, so the space complexity is constant.