题面:
题解:维护长度为p的长度的滑动窗口,cnts维护当前窗口内个字母s与p的差,用一个变量res维护不同的数量,当res=0时是异位词。
class Solution { public: int cnts[26]; int cntp[26]; vector<int> findAnagrams(string s, string p) { vector<int> ans; int n = s.size(); int m = p.size(); int res = 0; if(n<m) return ans; for(int i = 0;i < m;i ++) { cnts[ s[i] -'a' ] ++; cntp[ p[i] - 'a']++; } for(int i=0;i<26;i++) { cnts[i]-=cntp[i]; if(cnts[i] != 0) res++; } if(res == 0)ans.push_back(0); for(int i = m ;i < n;i ++) { if(cnts[s[i-m] - 'a']==1) res--; if(cnts[s[i-m]]-'a'==0) res++; cnts[ s[i-m] - 'a' ] --; if(cnts[s[i] - 'a']==-1) res--; if(cnts[s[i]]-'a'==0) res++; cnts[ s[i] - 'a' ] ++; if(res==0) ans.push_back(i-m+1); } return ans; } };