29 lines
827 B
C++
29 lines
827 B
C++
class Solution {
|
|
public:
|
|
bool checkCnt(vector<int>& cnts, vector<int>& cntp){
|
|
for(int i = 0; i < 26; i++){
|
|
if(cnts[i] != cntp[i]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
vector<int> findAnagrams(string s, string p) {
|
|
vector<int> cntp(26);
|
|
for(char c:p){ cntp[c-'a']++; }
|
|
|
|
vector<int> ret;
|
|
vector<int> cnts(26);
|
|
for(int i = 0; i < min(p.length(), s.length()); i++){
|
|
cnts[s[i] - 'a']++;
|
|
}
|
|
|
|
if(checkCnt(cnts, cntp)) { ret.push_back(0);}
|
|
|
|
for(int r = p.length(); r < s.length(); r++){ // sliding window
|
|
int l = r - p.length() + 1;
|
|
cnts[s[l-1] - 'a']--;
|
|
cnts[s[r] - 'a']++;
|
|
if(checkCnt(cnts, cntp)) { ret.push_back(l); }
|
|
}
|
|
return ret;
|
|
}
|
|
}; |