567. 字符串的排列
分类:滑动窗口
如果s2窗口内的每个字母的出现次数与s1完全符合,那么ok
特例:s1 > s2,必然不会出现子串
class Solution {
public:
bool chk(string& s1, vector<int>& s1Map, vector<int>& s2Map){
for(char& c : s1) if(s1Map[c-'a'] != s2Map[c-'a']) return false;
return true;
}
bool checkInclusion(string s1, string s2) {
if(s1.size() > s2.size()) return false;
vector<int> s1Map(26, 0), s2Map(26, 0);
int windowSize = s1.size(), i=0, j=0;
for(char& c : s1) s1Map[c-'a']+=1;
for(;j<windowSize; j++) s2Map[s2[j]-'a']+=1;
if(chk(s1, s1Map, s2Map)) return true;
while(j<s2.size()){
s2Map[s2[i++]-'a']-=1;
s2Map[s2[j++]-'a']+=1;
if(chk(s1, s1Map, s2Map)) return true;
}
return false;
}
};/* 91.8% **/
2021/02/10