- 对于判断两个词是否为异位词,可以改而判断它们的词频表是否相同。
- 基于此,在
s
串中设置滑动窗口,大小跟p
串一样,移动(剔除左边,增加右边)这个窗口并实时记录下它的词频表然后与p
的词频表比较。
class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> res;int slen = s.length(), plen = p.length();if(slen < plen) return res;vector<int> pcount(26), scount(26); for(auto c : p) pcount[c - 'a'] ++;int i = 0;for(;i < plen;i ++) scount[s[i] - 'a'] ++;if(scount == pcount) res.push_back(0);while(i < slen){scount[s[i - plen] - 'a'] --;scount[s[i] - 'a'] ++;if(scount == pcount) res.push_back(i - plen + 1);i ++;}return res;}
};