
🔥草莓熊Lotso:个人主页
❄️个人专栏:《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受。
🎬博主简介:

聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

题目链接:
题目描述:

题目示例:

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;
}
};class Solution {
public List<Integer> findAnagrams(String ss, String pp) {
List<Integer> ret = new ArrayList<Integer>();
char[] s = ss.toCharArray();
char[] p = pp.toCharArray();
int[] hash1 = new int[26]; // 统计字符串 p 中每⼀个字符出现的个数
for (char ch : p)
hash1[ch - 'a']++;
int[] hash2 = new int[26]; // 统计窗⼝中每⼀个字符出现的个数
int m = p.length;
for (int left = 0, right = 0, count = 0; right < s.length; 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.add(left);
}
return ret;
}
}笔记字有点丑,大家见谅:

往期回顾:
《算法闯关指南:优选算法--滑动窗口》--09长度最小的子数串,10无重复字符的最长字串
《算法闯关指南:优选算法--滑动窗口》--11最大连续1的个数 III,12将 x 减到 0 的最小操作数
结语:最新力扣438题解析:字符串字母异位词搜索,附手写解题笔记+代码实现,适合算法进阶学习,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。