class Solution{ // 438 O(N) O(1)
public:
vector<int> findAnagrams(string s,string p){
int n=s.size(),m=p.size(); if(m>n) return {};
int cnt[26]={0},need=m; for(char c:p) ++cnt[c-'a'];//p需求;差幾成窗
vector<int> ans;
for(int r=0;r<n;++r){
if(cnt[s[r]-'a']-->0) --need;//右進:舊值>0→補一
if(r>=m && cnt[s[r-m]-'a']++>=0) ++need;//左出:舊值≥0→缺一
if(!need) ans.push_back(r-m+1);
}
return ans;
}
};
跟567實在太像必需比較下
438 起點 固定為|s1| 視窗長度達標且need==0 push_back(起點)多次
567 包含否 同為|p|
m 一律代表pattern的長度:拿來比對的短字串 p
n 則text長度:滑動視窗去找的位置 記做s