news 2026/7/4 12:25:08

滑动窗口秒解LeetCode字母异位词

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
滑动窗口秒解LeetCode字母异位词

一、题目理解:什么是 “异位词子串”?

简单说:字符串s中,长度和p相等、且字符出现次数完全一致的子串,就是我们要找的 “异位词子串”,最终返回这些子串的起始索引

比如示例 1 里,p=abc(长度 3),s=cbaebacbdcba(索引 0)、bac(索引 6)都是abc的异位词。

二、核心思路:滑动窗口 + 字符频率数组

异位词的本质是 “字符频率完全匹配”,所以我们可以用一个长度为 26 的数组(对应 26 个小写字母)统计p的字符频率,再用滑动窗口s中动态维护当前窗口的字符频率,一旦窗口长度等于p的长度,就说明找到了一个异位词子串。

三、代码逐行解析(C++ 版)

直接看代码 + 注释,逻辑超清晰:

cpp

class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> v; // 存储结果(异位词子串的起始索引) int ch[26] = {0}; // 统计p的字符频率(初始全0) // 1. 先统计p中每个字符的出现次数 for(int i=0; i<p.size(); ++i) ch[p[i]-'a']++; // 比如p[i]是'a',则ch[0]++ int left=0; // 滑动窗口的左边界 // 2. 右边界right遍历s的每个字符 for(int right=0; right<s.size(); ++right) { int c = s[right]-'a'; // 当前字符对应的数组下标 ch[c]--; // 窗口右移,当前字符进入窗口,频率-1 // 3. 若当前字符频率<0,说明窗口里该字符多了,左边界右移“挤掉”多余字符 while(ch[c]<0) { ++ch[s[left]-'a']; // 左边界字符移出窗口,频率+1 ++left; // 左边界右移 } // 4. 当窗口长度等于p的长度时,说明找到异位词 if(right-left+1 == p.size()) v.push_back(left); // 记录当前窗口的起始索引left } return v; } };

四、为什么这个思路高效?

滑动窗口的时间复杂度是O(n)(n 是s的长度),因为leftright都只遍历一次;字符频率数组的空间复杂度是O(1)(固定 26 个元素),属于 “时间换空间” 的最优解之一。

五、实战小技巧

遇到 “子串匹配 + 字符频率” 类题目,优先考虑滑动窗口 + 固定长度数组的组合:

  • 用数组统计目标串的频率
  • 窗口在原串中动态维护频率
  • 窗口长度匹配时直接记录结果
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 9:21:02

git clone项目报错?用PyTorch-CUDA-v2.7统一运行环境

用 PyTorch-CUDA-v2.7 镜像解决 git clone 后项目跑不起来的难题 在深度学习项目的开发与复现过程中&#xff0c;你是否经常遇到这样的场景&#xff1a;从 GitHub 上克隆了一个热门项目&#xff0c;满怀期待地运行 python train.py&#xff0c;结果却迎来一连串报错——“Modul…

作者头像 李华
网站建设 2026/7/4 9:21:56

计算机毕业设计springboot基于的高校人事管理系统的设计与实现 高校教职工数字化管理平台的设计与实现——基于SpringBoot框架 面向高校的人力资源信息管理系统构建与研发

计算机毕业设计springboot基于的高校人事管理系统的设计与实现bq6763r2 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 高校人事工作长期依赖纸质与Excel&#xff0c;信息孤岛、…

作者头像 李华
网站建设 2026/7/4 9:24:20

计算机毕业设计springboot订餐管理系统 基于 SpringBoot 的智慧餐厅在线订餐平台 SpringBoot 驱动的数字化餐饮订单与座位预约系统

计算机毕业设计springboot订餐管理系统8cmsna01 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。外卖早已成为日常&#xff0c;但高峰期电话占线、菜单更新滞后、座位被占、后厨漏…

作者头像 李华
网站建设 2026/7/4 10:55:05

PyTorch-CUDA-v2.7镜像与传统conda环境的五大优势对比

PyTorch-CUDA-v2.7镜像与传统conda环境的五大优势对比 在深度学习项目中&#xff0c;你是否经历过这样的场景&#xff1a;新同事花了整整两天才配好能跑通代码的环境&#xff1f;又或者模型在本地训练正常&#xff0c;部署到服务器却因CUDA版本不匹配而崩溃&#xff1f;这些看似…

作者头像 李华
网站建设 2026/7/3 13:07:40

当PI遇上自抗扰:永磁同步电机控制的暴力美学

基于自抗扰控制器的永磁同步电机矢量控制。 在传统双闭环PI控制系统结构的基础上&#xff0c;在 Simulink软件中&#xff0c;分别采用PI控制器和自抗扰控制器搭建转 速环三相永磁同步电机矢量控制系统模型&#xff0c;通过仿真得到该控制方法下的电机转速、电磁转矩和电流响应。…

作者头像 李华