這一題與 567 類似,是找 anagram 題題目,令 p 長度為 window size,即可解。
classSolution {
public: vector<int> findAnagrams(string s, string p) {
vector<int> res;
int k = p.size();
int n = s.size();
if (n < k) return res;
unordered_map<char,int> cnt1, cnt2;
for (constauto& c : p) cnt1[c]++;
int valid =0;
for (int i =0; i < k; i++) {
if (cnt1.count(s[i]) &&++cnt2[s[i]] == cnt1[s[i]]) valid++;
}
if (valid == cnt1.size()) res.push_back(0);
for (int i = k; i < n; i++) {
if (cnt1.count(s[i]) &&++cnt2[s[i]] == cnt1[s[i]]) valid++;
if (cnt1.count(s[i-k]) && cnt2[s[i-k]]--== cnt1[s[i-k]]) valid--;
if (valid == cnt1.size()) res.push_back(i-k+1);
}
return res;
}
};