我果然还是太菜了(点烟)。
一开始想法是构建map,记录每个字母出现的位置,后来想了好久滑动窗口该怎么移动。
后来看了答案才明白滑动窗口是固定的啊啊啊,每次向右滑就两指针同时右移就行。
好简单……为什么我做了这么久…………
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
unordered_map<char,int> mp;
vector<int> result;
int low=0;
int high=0;
for(int i=0;i<p.size();i++){
mp[p[i]]++;
mp[s[high]]--;
if(mp[p[i]]==0) mp.erase(p[i]);
if(mp[s[high]]==0) mp.erase(s[high]);
high++;
}
if(mp.empty()) result.push_back(low);
while(high<s.size()){
mp[s[high]]--;
mp[s[low]]++;
if(mp[s[low]]==0) mp.erase(s[low]);
if(mp[s[high]]==0) mp.erase(s[high]);
high++;
low++;
if(mp.empty()) result.push_back(low);
}
return result;
}
};