【优选算法必刷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

Flutter 组件 fluid_layout 的适配 鸿蒙Harmony 实战 - 驾驭全场景动态自适应栅格、实现鸿蒙端弹性布局分发与多端显示适配方案

Flutter 组件 fluid_layout 的适配 鸿蒙Harmony 实战 - 驾驭全场景动态自适应栅格、实现鸿蒙端弹性布局分发与多端显示适配方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 fluid_layout 的适配 鸿蒙Harmony 实战 - 驾驭全场景动态自适应栅格、实现鸿蒙端弹性布局分发与多端显示适配方案 前言 在鸿蒙(OpenHarmony)生态的“一次开发、多端部署”战略中,面对需要在华为手机、MatePad、智慧屏、甚至车载大屏等不同分辨率、不同宽纵比的设备间无缝流转的 UI 设计。如果仅仅依靠写死的 double 宽度或者是简单的 MediaQuery.of(context).size。那么不仅会导致在折叠屏(Foldable)展开瞬间产生严重的界面坍塌,更会因为缺乏一套工业级的栅格(Grid)规范。引发在不同 DPI 下文字重叠、按钮溢出以及留白失控等严重的适配事故方案。 我们需要一种“流动感知、栅格克制”的布局艺术。

By Ne0inhk
Flutter 三方库 json_extractor 的鸿蒙化适配指南 - 支持声明式 JSON 数据提取、复杂嵌套结构解析与强类型转换

Flutter 三方库 json_extractor 的鸿蒙化适配指南 - 支持声明式 JSON 数据提取、复杂嵌套结构解析与强类型转换

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 json_extractor 的鸿蒙化适配指南 - 支持声明式 JSON 数据提取、复杂嵌套结构解析与强类型转换 前言 在 Flutter for OpenHarmony 的日常开发中,处理后端返回的“排山倒海”般的 JSON 数据是每个开发者的必经之路。虽然 json_serializable 很强大,但如果你只需要从一个极其庞大且嵌套复杂的 JSON 中提取特定的几个字段,定义完整的 Model 类就显得过于繁琐。json_extractor 提供了一种基于声明式路径的轻量级提取方案。本文将指导大家如何在鸿蒙端利用该库高效“榨取”JSON 数据。 一、原理解析 / 概念介绍 1.1 基础原理 json_

By Ne0inhk
Flutter 三方库 benchmarking 鸿蒙端自动化审计性能适配剖析:建设全终端高度精确指令运行时延探测标尺雷达,实现硬件核心指令运算与异步算法代码-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 benchmarking 鸿蒙端自动化审计性能适配剖析:建设全终端高度精确指令运行时延探测标尺雷达,实现硬件核心指令运算与异步算法代码-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 benchmarking 鸿蒙端自动化审计性能适配剖析:建设全终端高度精确指令运行时延探测标尺雷达,实现硬件核心指令运算与异步算法代码极致分析验证 在鸿蒙应用的高度性能敏感模块(如自定义排序算法、大规模数据结构映射或高频业务逻辑循环)的开发中,如何精准量化每一行代码的执行耗时?benchmarking 库提供了一套专业的基准测试工具,能有效消除冷启动抖动与系统背景干扰。本文将详解该库在 OpenHarmony 上的适配要点。 前言 什么是 benchmarking?它不仅仅是简单的 Stopwatch 封装。它会自动执行多次“热身”运行,并收集足够多的样本量以计算出精确的平均耗时、方差以及性能百分位数。在鸿蒙操作系统强调的“极致流畅性能”和“系统级精细化能效治理”背景下,利用 benchmarking 库可以确保你的核心算法在面对鸿蒙海量用户时,依然能提供稳定、确定性的执行产出。 一、原理解析 1.1 基础概念 其核心是通过控

By Ne0inhk
Flutter for OpenHarmony:string_validator 验证与清洗字符串,防御恶意输入(字符串校验工具箱) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:string_validator 验证与清洗字符串,防御恶意输入(字符串校验工具箱) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在处理用户输入时,“永远不要相信用户提交的数据” 是安全的第一原则。无论是注册表单的邮箱校验,还是 API 参数的格式清洗,字符串验证都是必不可少的环节。 string_validator 是一个功能极其丰富的字符串验证和清洗库,它移植自著名的 Node.js 库 validator.js。即使是复杂的信用卡号、ISBN、UUID 校验,它也能一行代码搞定。本文将介绍如何在 OpenHarmony 上利用它构建健壮的数据校验层。 一、核心功能 1.1 验证 (Validators) 返回 bool 值,判断字符串是否符合某种格式。 * isEmail: 邮箱格式 * isURL: 网址校验 * isCreditCard: 信用卡号(Luhn 算法) * isUUID:

By Ne0inhk