力扣hot100:滑动窗口——找到字符串中所有字母异位词

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

考虑用滑动窗口,窗口大小固定为字符串p的长度,用一个for循环控制子串的结束位置。

怎么判断是字母异位词?

1、排序:字符串中所有符合条件的字母异位词与目标串p在经过排序后是相等的。所以考虑在匹配的时候,通过子串排序后与p串排序后相等,来找出所有的字母异位词。(因为sort()函数的时间复杂度是O(nlogn),所以运行时超时)
vector<int> findAnagrams(string s, string p) {if(s.size()<p.size()){return vector<int>();}string tempStr=p;sort(tempStr.begin(), tempStr.end());int l=0;vector<int> results;for(int r=0;r<s.size()-p.size(); r++){if(r-l==p.size()-1){string temp = s.substr(l,p.size());sort(temp.begin(), temp.end());if(temp==tempStr){results.push_back(l);}l++;}}return results;}
2、哈希:当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。
vector<int> findAnagrams(string s, string p) {if(s.size()<p.size()){return vector<int>();}vector<int> sCount(26);vector<int> pCount(26);vector<int> res;for(int i=0;i<p.size();i++){sCount[s[i]-'a']++;pCount[p[i]-'a']++;}if(sCount == pCount){res.push_back(0);}int sLen = s.size();int pLen = p.size();for(int i=0; i<sLen-pLen; i++){--sCount[s[i]-'a'];++sCount[s[i+pLen]-'a'];if(sCount==pCount){res.push_back(i+1);}}return res;}

复杂度分析

时间复杂度:O(m+(n−m)×Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,Σ 为所有可能的字符数。我们需要 O(m) 来统计字符串 p 中每种字母的数量;需要 O(m) 来初始化滑动窗口;需要判断 n−m+1 个滑动窗口中每种字母的数量是否与字符串 p 中每种字母的数量相同,每次判断需要 O(Σ) 。因为 s 和 p 仅包含小写字母,所以 Σ=26。

空间复杂度:O(Σ)。用于存储字符串 p 和滑动窗口中每种字母的数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能通识速览一(神经网络)(编辑中)

上篇&#xff1a;人工智能通识速览一&#xff08;机器学习&#xff09; 人工智能通识速览一&#xff08;机器学习&#xff09;&#xff08;编辑中&#xff09;-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【数据标准】数据标准化框架体系-基础类数据标准

导读&#xff1a;数据标准化的四大基础类标准&#xff08;业务术语、业务规则、命名规范、代码标准&#xff09;是企业数据治理的核心支柱。主要作用体现在​消除业务与技术间的语义鸿沟​&#xff08;通过统一术语与命名规范&#xff09;&#xff0c;​保障数据全生命周期的质…

可发1区的超级创新思路(python\matlab实现):MPTS+Lconv+注意力集成机制的Transformer时间序列模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等。 一、模型整体架构(本文以光伏功率预测为例) 本模型由多尺度特征提取模块(MPTS)…

深入解析C#中的解释器模式:原理与应用

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在为特定的语言提供解释和执行的能力。该模式将语言的文法规则封装在类中&#xff0c;使得能够灵活、动态地对这些规则进行解释。在实际开发中&#xff0c;尤其是处理一些定制的表达式…

LeetCode知识点整理

1、Scanner 输入&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取整数int num scanner.nextInt();// 读取一行字符串String line scanner.nextLine();scanner.close();…

红宝书第二十一讲:详解JavaScript的模块化(CommonJS与ES Modules)

红宝书第二十一讲&#xff1a;详解JavaScript的模块化&#xff08;CommonJS与ES Modules&#xff09; 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、模块化的意义&#xff1a;分而治之 模块化解决代码依赖混…

Android Product Flavors 深度解析与最佳实践:构建多版本应用的全方位指南

1. 高效配置模板 1.1 现代化多维度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…

QListView开发入门

1. QListView 基础介绍 QListView 是 Qt 框架中用于显示项目列表的控件&#xff0c;属于模型/视图架构的一部分。它提供了一种灵活的方式来显示和操作项目列表。 主要特点&#xff1a; 基于模型/视图架构 支持多种视图模式&#xff08;列表、图标&#xff09; 内置选择、编…

Cookie可以存哪些指?

Cookie是一种小型文本文件&#xff0c;通常由服务器生成并发送到用户浏览器中保存。它可以用于存储一些简单但非常有用的信息&#xff0c;以便于后续请求时自动附带回服务器使用。下面是Cookie能够存储的一些典型内容类别及用途说明&#xff1a; 会话标识符(Session ID) 这是最…

非手性分子发光有妙招:借液晶之力,实现高不对称圆偏振发光

*本文只做阅读笔记分享* 一、圆偏振发光研究背景与挑战 圆偏振发光&#xff08;CPL&#xff09;材料在3D显示、光电器件等领域大有用处&#xff0c;衡量它的一个重要指标是不对称发光因子&#xff08;glum&#xff09;。早期CPL材料的glum值低&#xff0c;限制了实际应用。为…

CSS中的em,rem,vm,vh详解

一&#xff1a;em 和 rem 是两种相对单位&#xff0c;它们常用于 CSS 中来设置尺寸、字体大小、间距等&#xff0c;主要用于更灵活和响应式的布局设计。它们与像素&#xff08;px&#xff09;不同&#xff0c;不是固定的&#xff0c;而是相对于其他元素的尺寸来计算的。 1. em …

《非暴力沟通》第十二章 “重获生活的热情” 总结

《非暴力沟通》第十二章 “重获生活的热情” 的核心总结&#xff1a; 本章将非暴力沟通的核心理念延伸至生命意义的探索&#xff0c;提出通过觉察与满足内心深处的需要&#xff0c;打破“义务性生存”的桎梏&#xff0c;让生活回归由衷的喜悦与创造。作者强调&#xff0c;当行动…

MySQL数据库精研之旅第五期:CRUD的趣味探索(上)

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、CRUD简介 二、Create新增 2.1. 语法 2.2. 示例 三、Retrieve检索 3.1. 语法 3.2. 示例 一、CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作&#xff1a;Create(创建)、Retrieve(检索…

【银河麒麟系统常识】需求:安装.NET SDK

前提 网络状态正常(非离线安装)&#xff1b; 终端命令如下所示 根据不同系统的版本&#xff0c;自行选择&#xff0c;逐行执行即可&#xff1b; # 基于 Ubuntu/Debian 的银河麒麟系统 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O…

行业智能体大爆发,分布式智能云有解

Manus的一夜爆红&#xff0c;在全球范围内引爆关于AI智能体的讨论。 与过去一般的AI助手不同&#xff0c;智能体&#xff08;AI Agent&#xff09;并非只是被动响应&#xff0c;而是主动感知、决策并执行的应用。Gartner预测&#xff0c;到2028年&#xff0c;15%的日常工作决策…

工作记录 2017-03-13

工作记录 2017-03-13 序号 工作 相关人员 1 修改邮件上的问题。 开始处理操作日志部分。 测试了C#和MySql的连接。 更新RD服务器。 郝 更新的问题 1、 修改了CMS1500的打印&#xff0c;NDC的内容用了小的字体。 2、在Cliams List中可以查看Job的Notes。 3、Payment Po…

【七层分析框架:寒门贵子消亡的系统性绞杀】

七层分析框架&#xff1a;寒门贵子消亡的系统性绞杀 第一层&#xff1a;教育资源断层 结论&#xff1a;基础教育投入差已达量子级差距 机制&#xff1a; 北京海淀小学生均经费&#xff08;&#xffe5;47,800&#xff09; 云南山区&#xff08;&#xffe5;6,200&#xff09;…

Codeforces Round 1014 (Div. 2)(A-D)

题目链接&#xff1a;Dashboard - Codeforces Round 1014 (Div. 2) - Codeforces A. Kamilka and the Sheep 思路 最大值-最小值 代码 void solve(){int n;cin>>n;vi a(n10);int mx0;int miinf;for(int i1;i<n;i){cin>>a[i];mimin(mi,a[i]);mxmax(mx,a[i])…

开源AI智能体项目OpenManus的部署

关于开源AI智能体项目OpenManus的部署与背景信息整理如下&#xff1a; 1. OpenManus 背景与核心亮点 开发背景&#xff1a;Manus作为一款闭源的通用型AI智能体产品&#xff0c;因内测邀请码稀缺&#xff08;二手平台炒至10万元&#xff09;引发争议。开源社区迅速反应&#xff…

使用jieba库进行TF-IDF关键词提取

文章目录 一、什么是TF-IDF&#xff1f;二、为什么选择jieba库&#xff1f;三、代码实现1.导入必要的库2. 读取文件3.将文件路径和内容存储到DataFrame4.加载自定义词典和停用词5.分词并去除停用词 四、总结 一、什么是TF-IDF&#xff1f; TF-IDF&#xff08;Term Frequency-I…