567. Permutation in String
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.
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
Note:
The input strings only contain lower case letters.
The length of both given strings is in range [1, 10,000].
// Sliding window
bool checkInclusion(string s1, string s2) { // time: O(len1 + len2); space: O(1)
int len1 = s1.length(), len2 = s2.length();
vector<int> record(128, 0);
for (const char& ch : s1) ++record[ch];
int begin = 0, end = 0, counter = len1;
while (end < len2) {
if (record[s2[end++]]-- >= 1) --counter;
if (counter == 0) return true;
if (end - begin == len1 && record[s2[begin++]]++ >= 0) ++counter;
}
return false;
}
Last updated
Was this helpful?