遍历+哈希表
O(Ns + Np)
class Solution {
public:
bool compare(vector<int> v1, vector<int> v2){
for (int i=0;i<26;i++) {
if (v1[i]!=v2[i]) return false;
}
return true;
}
vector<int> findAnagrams(string s, string p) {
if (s.size()<p.size()) return {};
vector<int> ans;
vector<int> hash_p(26,0), hash_s(26,0);
// unordered_set<char> set_p, set_s;
for (auto c:p) hash_p[c-'a']++;
int len_p = p.size();
for (int i =0;i<len_p;i++) {
char j = s[i] - 'a';
hash_s[j]++;
}
if (compare(hash_p, hash_s)) ans.push_back(0);
int l=0, r = len_p-1;
while (r+1<s.size()){
r++;
int j1 = s[l]-'a', j2 = s[r]-'a';
hash_s[j1]--;
hash_s[j2]++;
l++;
if (compare(hash_s,hash_p)) ans.push_back(l);
}
return ans;
}
};