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
ands2
consist of lowercase English letters.
class Solution {
public:
bool checkInclusion(string s1, string s2) {
if (s1.size() > s2.size()) return false;
vector<int> c1(26),c2(26);
for (int i=0;i<s1.size();i++){
++c1[s1[i]-'a'];
++c2[s2[i]-'a'];
}
for (int i=s1.size(),j=s1.size(); i<s2.size();i++){
if (c1==c2) return true;
--c2[s2[i-j]-'a'];
++c2[s2[i]-'a'];
}
return c1==c2;
}
};