关键是如何判断异位词相等
// 利用字母表 两个vector<int> 可以判断相等 ,或者排序
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> res;
if (s.size() < p.size()) {
return res;
}
// p的所有字符
vector<int> counts(26);
for (int i = 0; i < p.size(); i++) {
counts[p[i] - 'a']++;
}
// 对比字符
vector<int> curCounts(26);
for (int i = 0; i < p.size() - 1; i++) {
curCounts[s[i] - 'a']++;
}
for (int left = 0,right = p.size() -1; right < s.size(); left++,right++)
{
curCounts[s[right] - 'a']++;
if (curCounts == counts) {
res.push_back(left);
}
// 当前的对比完了,左边-- ,保证窗口的长度不变
curCounts[s[left] - 'a']--;
}
return res;
}
};