题目描述:
给定两个字符串 s
和 p
,找到 s
中所有 p
的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
示例:
输入: s = "cbaebabacd", p = "abc" 输出: [0,6]
基础知识:
滑动窗口——输入一个串 S
,一个串 T
,找到 S
中所有 T
的排列,返回它们的起始索引,本质为计数判断是否一样。
代码运行:
class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int>res;
unordered_map<char,int>hashp,hashs;
int n=s.size();
//记录p串各字符出现的次数
for(int i=0;i<p.size();i++){
hashp[p[i]]++;
}
int left=0,right=0;
int cnt=0;
while(right<n){
char c=s[right];
hashs[c]++;
cnt++;
right++;
while(hashs[c]>hashp[c]){
hashs[s[left]]--;
left++;
cnt--;
}
if(cnt==p.size()){
res.push_back(left);
}
}
return res;
}
};