当前位置: 首页 > wzjs >正文

新手站长如何购买虚拟主机做网站本地免费发布信息网站

新手站长如何购买虚拟主机做网站,本地免费发布信息网站,长春做网站长春网站设计,wordpress 安装phpLeetCode-滑动窗口-找到字符串中所有字母异位词 ✏️ 关于专栏:专栏用于记录 prepare for the coding test。 文章目录 LeetCode-滑动窗口-找到字符串中所有字母异位词📝 找到字符串中所有字母异位词🎯题目描述🔍 输入输出示例&am…

618224d51d66b92b423588150f25f3a7-1746706818078-1-1746790482186-1-1746797747208-4

LeetCode-滑动窗口-找到字符串中所有字母异位词

✏️ 关于专栏:专栏用于记录 prepare for the coding test


文章目录

  • LeetCode-滑动窗口-找到字符串中所有字母异位词
    • 📝 找到字符串中所有字母异位词
      • 🎯题目描述
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧪滑动窗口—定长
      • 🧪滑动窗口—变长
      • 🌟 总结
        • 🔁 相似题目推荐(逐步进阶)

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

🎯题目描述

给定两个字符串 sp,找到 s 中所有 p异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

🔗题目链接:找到字符串中所有字母异位词

🔍 输入输出示例

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

示例 2:

输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

🧩题目提示

  • 1 <= s.length, p.length <= 3 * 104
  • sp 仅包含小写字母

🧪滑动窗口—定长

本题适合使用 定长滑动窗口,即窗口长度固定为 p.size(),从左往右滑动,每次滑动判断当前窗口是否是异位词。

我们用两个长度为 26 的数组来统计字母频次(因为仅包含小写字母),当两个数组相等时(array支持 = = == ==​直接比较),说明当前窗口是 p 的异位词。

1.预处理字符串 p 的字符频率,用一个长度为 26 的数组 cnt_p 存储。

2.滑动窗口遍历 s,维护当前窗口内的频率数组 cnt_s

3.若 cnt_scnt_p 相等,则窗口起始位置是一个异位词。

image-20250519114327236

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;array<int,26> cnt_s {};array<int,26> cnt_p {};for(char c : p){cnt_p[c - 'a']++;}for(int right = 0;right < s.size();right++){cnt_s[s[right] - 'a']++;int left = right - p.size() + 1;if(left >= 0){if(cnt_s == cnt_p){ans.push_back(left);}cnt_s[s[left]-'a']--;}else{continue;}}return ans;}
};

🧪滑动窗口—变长

相比固定窗口的方法,我们也可以用灵活窗口(变长)去尝试:

  • 每次将右指针加入窗口,并对字符频率计数;
  • 若某个字符频率多了,就不断移动左指针直到频率合法;
  • 当窗口长度等于 p.size(),说明找到一个异位词。
class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;array<int,26> cnt {};for(char c : p){cnt[c - 'a']++;}int left = 0;for(int right = 0;right < s.size();right++){int c = s[right] - 'a';cnt[c]--;while(cnt[c] < 0){cnt[s[left] - 'a']++;left++;}if(right - left + 1 == p.size()){ans.push_back(left);}}return ans;}
};

🌟 总结

  • 使用字符频率数组作为滑动窗口核心;

  • 左指针控制窗口合法性,右指针推动遍历;

  • 比较频率数组是否一致,作为是否匹配的判断依据。

滑动窗口维度技巧要点
指针控制一般使用 leftright 两个指针定义区间 [left, right][left, right)
窗口内数据维护统计频率、子串长度、计数器(如满足条件的字符个数)等
何时收缩窗口取决于当前窗口是否满足题意或已经不合法
何时记录结果当窗口满足题意时保存起始索引或其他信息
知识点简要描述
滑动窗口一种通过左右指针控制子串区域的技巧,适合处理子串/子数组问题
字符频率匹配通过数组或哈希表统计字符出现次数,判断是否为异位词
固定长度滑窗每次窗口长度固定,对新字符加入、旧字符移出,保持频率平衡
数组比较std::array<int, 26> 支持 == 运算,效率高于 unordered_map
🔁 相似题目推荐(逐步进阶)
难度题目题目编号技巧
🌱 简单字符串的排列567判断是否包含某异位词
🌿 中等本题438找出所有异位词起始位置
🌳 中等最小覆盖子串76滑窗 + 字符要求计数器
🌲 困难串联所有单词的子串30复杂频率统计、窗口倍增

473a45227a39b7ec06f6525e7ebb85b

http://www.dtcms.com/wzjs/380334.html

相关文章:

  • wordpress多合一百度seo排名点击
  • 视频网站分享复制通用代码怎么做百度怎么优化网站关键词
  • 电子商务网站建设需要学什么软件视频号视频怎么看下载链接
  • 网站集约化建设做法文件外链生成网站
  • 广西智能网站建设报价济宁seo优化公司
  • 电商网站开发研究内容和预期成果seo关键词排名在线查询
  • 做搞笑app好还是做电影网站好网站站长工具
  • ppt做的好的网站最近一周新闻大事摘抄
  • 做网站每月收入百度官方电话24小时
  • wordpress 集成paypal长沙专业seo优化推荐
  • asp.net做网站后台友情链接是什么意思
  • 湖北省住房和城乡建设厅门户网站惠州网络推广
  • 自己怎么做淘宝客网站海南百度竞价排名
  • 什么网站可以做代购前端培训班一般多少钱
  • 抖音电商官网谷歌seo关键词优化
  • 怎么用sublime做网站怎么理解搜索引擎优化
  • 全球十大网站访问量排名宁波网站建设公司哪家好
  • 成都网站建设代理加盟上海网站建设哪家好
  • 做跨境电商一件代发的网站百度推广客户端怎么登陆
  • wordpress 搬家后无法打开广州百度seo 网站推广
  • 宜昌手机网站制作百度官网认证多少钱
  • 国外做设计的网站有哪些百度小程序怎么进入
  • 外国人爱做视频网站网页制作app手机版
  • 做快三网站地推接单平台app排行榜
  • 公司网站后台上传不了图片拉人注册给佣金的app
  • 多语言网站怎么做怎么做市场营销和推广
  • 深圳做网站最好的公司国产最好的a级suv88814
  • flask做的网站项目百度推广视频
  • 上海网站建设品牌太原seo推广外包
  • 稿定设计app免费版官方宁波seo网站推广