思路:固定长度滑动窗口
r:-1后>=0表示是一次有效还款
l:+1还回去后>0 表示失去一次有效还款
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
int n = s.size(), m = p.size(), cnt = 0;
if (n < m) return {}; //特殊判断
int flag[26] = {0};
vector<int> ans;
for (auto& ch : p) flag[ch - 'a']++;
int l = 0;
for (int r = 0; r < n; ++r) {
if (r >= m) {
if (++flag[s[l] - 'a'] > 0) cnt--;
l++;
}
if (--flag[s[r] - 'a'] >= 0) cnt++;
if (cnt == m) ans.push_back(l);
}
return ans;
}
};