Given two strings s1 and s2, write a function to return true if s2contains 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].
class Solution {
public:
bool checkInclusion(string s1, string s2) {
map<char, int> mp1;
map<char, int> mp2;
for (auto ch : s1) {
mp1[ch]++;
}
int start = 0, end = 0;
while (end < s2.size()) {
mp2[s2[end]]++;
while(end - start > s1.size() - 1) {
if (--mp2[s2[start++]] == 0) {
mp2.erase(s2[start - 1]);
}
}
if (mp2 == mp1) {
return true;
}
end++;
}
return false;
}
};
No comments:
Post a Comment