聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力
滑动窗口专题

题目链接:
题目描述:

题目示例:

class Solution {
public:
vector<int> findAnagrams(string s, string p) {
vector<int> ret;
int hash1[26]={0};//统计字符串p中每个字符出现的次数
for(auto ch:p) hash1[ch-'a']++;
int hash2[26]={0};// 统计窗口里面每个字符出现的个数
int m=p.size();
for(int left=0,right=0,count=0;right<s.size();right++)
{
char in=s[right];
//进窗口+维护count
if(++hash2[in-'a']<=hash1[in-'a']) count++;
if(right-left+1>m)//判断
{
char out=s[left++];
//出窗口+维护count
if(hash2[out-'a']-- <= hash1[out-'a']) count--;
}
//更新结果
if(count==m) ret.push_back(left);
}
return ret;
}
};博主笔记(字迹有点丑,请大家见谅):

往期回顾:
【优选算法必刷100题】第009~010题(滑动窗口):长度最小的子数串、无重复字符的最长字串
【优选算法必刷100题】第011~012题(滑动窗口):最大连续1的个数 III,将 x 减到 0 的最小操作数
【优选算法必刷100题】第013题(滑动窗口):水果成篮问题
结语:最新力扣438题解析:字符串字母异位词搜索,附手写解题笔记+代码实现,适合算法进阶学习,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持