【优选算法必刷100题】第014题(滑动窗口):找到字符串中所有字母异位词

【优选算法必刷100题】第014题(滑动窗口):找到字符串中所有字母异位词

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

🌟心向往之行必能至


🎥Cx330🌸的简介:


目录

前言:

找到字符串中所有字母异位词

解法(滑动窗口+哈希表):

算法思路:

C++代码演示:

算法总结&&笔记展示:

总结:


前言:

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

滑动窗口专题


找到字符串中所有字母异位词

题目链接:

438. 找到字符串中所有字母异位词 - 力扣(LeetCode)

题目描述:

题目示例:

解法(滑动窗口+哈希表):

算法思路:
  • 因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造一个长度与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;
  • 当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词
  • 因此可以用两个大小为 26 的数组来模拟哈希表,一个来保存 s 中的每个字符出现的个数,另一个来保存 p 中每一个字符出现的个数。这样就能判断两个串是否是异位词

C++代码演示:

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题解析:字符串字母异位词搜索,附手写解题笔记+代码实现,适合算法进阶学习,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持

Read more

【狂热算法篇】01 背包的逆袭:如何用算法装满你的 “财富背包”

【狂热算法篇】01 背包的逆袭:如何用算法装满你的 “财富背包”

嘿!01 背包超有趣,来看算法如何装满你的 “财富包”,快收藏哦~                  欢迎拜访:羑悻的小杀马特.-ZEEKLOG博客 本篇主题:带你细节剖析01背包的满选与非满选及滚动数组优化下的解法 制作日期:2025.01.06 隶属专栏:C/C++题海汇总 目录  一·01背包问题描述: 二.01背包问题举例说明: 三.01背包解决思路及例子分析 : 3.1暴力搜索法(穷举法): 3.2贪心算法: 3.2.1价值优先策略: 3.2.2重量优先策略: 3.2.3价值密度优先策略:  3.3动态规划法: 四.实际应用举例: 4.1资源分配问题: 4.2任务分配问题: 4.3盗贼的选择问题:

By Ne0inhk
算法入门:专题攻克一---双指针4(三数之和,四数之和)强推好题,极其锻炼算法思维

算法入门:专题攻克一---双指针4(三数之和,四数之和)强推好题,极其锻炼算法思维

🎬 胖咕噜的稞达鸭:个人主页 🔥 个人专栏: 《数据结构》《C++初阶高阶》《算法入门》 ⛺️技术的杠杆,撬动整个世界! 三数之和 三数之和 1. 题目分析: 取三元组中的三个数,num[i], num[j], num[k], i!=j, i != k; j != k ,也就是说一次取到的三个数不可以是相同位置的,三个数的位置各不相同。同时也满足三个数的相加等于0。最后还得是不同的组合(去重操作)。 这里给一个数组,便于演示: 【 -4 -4 -1 0 0 0 1 1 4 4 5 6】 2. 算法原理: 解法一:先排序+暴力枚举+

By Ne0inhk
华为OD机试 双机位C卷 双机位B卷 双机位A卷 2025C卷 2025B卷 真题题库目录|机考题库 + 算法考点详解

华为OD机试 双机位C卷 双机位B卷 双机位A卷 2025C卷 2025B卷 真题题库目录|机考题库 + 算法考点详解

华为OD机试真题题库目录 华为OD机试2025年11月19号机试切换至 (华为OD机试双机位C卷)机试时随机抽取,近期准备华为OD机试的 双机位C卷 真题,通过率将大大提升. 本专栏所有算法题全部包含详细的思路讲解以及C语言、JS、C++、Python、Go、java 源码实现。订阅专栏之后可以私信我开通OJ权限。 华为OD面试手撕代码真题目录,点击查看 华为OD技术面八股真题目录,点击查看 华为OD机试双机位C卷- 100分 序号题目考点 or 实现在线OJ地址1华为OD机试双机位C卷 - 补种未成活胡杨双指针点击去做题2华为OD机试双机位C卷 - 查找接口成功率最优时间段前缀和点击去做题3华为OD机试双机位C卷 - 螺旋数字矩阵模拟、逻辑分析点击去做题4华为OD机试双机位C卷 - 运维日志排序正则、排序点击去做题5华为OD机试双机位C卷 - 比赛模拟、排序点击去做题6华为OD机试双机位C卷 - 打印机队列优先队列点击去做题7华为OD机试双机位C卷 - 微服务的集成测试DFS、哈希表点击去做题8华为OD机试双机位C卷 - 完美走位双指针点击去做题9华为OD机试双机位C卷

By Ne0inhk
初探算法的魅力——【暴力枚举】

初探算法的魅力——【暴力枚举】

点击下面查看作者专栏🔥🔥C语言专栏🔥🔥🌊🌊编程百度🌊🌊🌠🌠如何获取自己的代码仓库🌠🌠 🌐索引与导读 * 暴力枚举(BF)的概念 * 暴力枚举的算法步骤 * 例题讲解 * 经典案例讲解一:百鸡问题 * 题目解析 * 思路方案 * 经典案例讲解二:盛最多水的容器 * 暴力枚举算法 * 最优解 * 经典案例讲解三:两数之和 * 经典案例讲解四:2025 * 💻 代码实现 * 希望读者多多三连 * 给小编一些动力 * 蟹蟹啦! 暴力枚举(BF)的概念 暴力枚举也称为穷举法,是计算机算法中最基础、最直观,但也是最费劲的一种解题思路 像我们平时没有最优解的算法题,往往都可以通过暴力枚举去算出最终结果 * 核心思想 不靠巧妙的技巧,而是利用计算机强大的计算能力,把所有可能的情况列举出来,一个一个去验证,直到找到正确答案 暴力枚举的算法步骤 * 列举 :确定解空间的范围,列出所有可能的解候选者 * 检验 :对每一个候选者进行判断,看它是否满足题目

By Ne0inhk