leecode438 | 找到所有字符串中的异位词

题意大致是,给定两个字符串,s 和 p
其中 要在s 中找到由p的元素组成的子字符串,记录子字符串首地址

class Solution {
public:vector<int> findAnagrams(string s, string p) {int m = s.size(), n = p.size();if(m < n)return {};vector<int> hashTable(26);for(auto ch : p){hashTable[ch - 'a']++;}vector<int> ret;/*手动移动滑动窗口右边界,如果是新元素循环循环移动左边界,直到找到右边的那个元素如果串口长度于p的长度一致,达成条件*/for(int l = 0, r = 0; r < m; ++r){hashTable[s[r] - 'a']--;while(hashTable[s[r] - 'a'] < 0){hashTable[s[l] - 'a']++;l++;}if(r - l + 1 == n){ret.push_back(l);}}return ret;}
};

其实很容易想到滑动窗口

这道题解的思路是,先把p的所有元素记录下来,然后开始遍历滑动串口的右边界,直接hashTable[s[r]]–;
如果其值>= 0 说明遍历的滑动窗口(s的子串)有p 的元素,不管 ,继续移动右窗口,直到滑出边界
如果 < 0 说明 新元素,此时右边界不能动,动左边界,左边界怎么动呢?就是左边界不断加元素,不断右移,最后把新元素添加进去了。
在窗口滑动的过程中,如果满足 r - l + 1 == n 说明找到了一个满足 p 的子字符串。

//还有一个
// 思想是一样的,但是看着会比较啰嗦class Solution {
public:vector<int> findAnagrams(string s, string p) {unordered_map<char, int> mp;vector<int> result;int s_len = s.size(), p_len = p.size();for(auto & c : p){mp[c]++;}int left = 0, right = 0, count = p_len;// 初始化滑动窗口while(right < p_len){if(mp.count(s[right]) > 0 && mp[s[right]] > 0){count--;}mp[s[right]]--;right++;}if(count == 0){result.push_back(left);}//移动滑动窗口while(right < s_len){if(mp.count(s[left]) > 0 && mp[s[left]] >= 0){count++;}mp[s[left]]++;left++;if(mp.count(s[right]) > 0 && mp[s[right]] > 0){count--;}mp[s[right]]--;right++;if(count == 0){result.push_back(left);}}return result;}
};

在这里插入图片描述

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

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

相关文章

vue-router 原理【详解】hash模式 vs H5 history 模式

hash 模式 【推荐】 路由效果 在不刷新页面的前提下&#xff0c;根据 URL 中的 hash 值&#xff0c;渲染对应的页面 http://test.com/#/login 登录页http://test.com/#/index 首页 核心API – window.onhashchange 监听 hash 的变化&#xff0c;触发视图更新 window.onhas…

谷歌关键词优化全攻略提高曝光率-华媒舍

现如今&#xff0c;互联网已成为信息获取的主要渠道&#xff0c;而搜索引擎则是人们寻找信息的首选工具之一。其中&#xff0c;谷歌作为全球最大的搜索引擎&#xff0c;其搜索结果的排名直接影响着网站的曝光率和流量。了解并掌握谷歌关键词优化的技巧&#xff0c;成为提升网站…

Vue项目打包:禁止生成sourceMap文件

Vue项目在打包过程中&#xff0c;默认会生成sourceMap文件。 sourceMap的主要作用是让打包后的文件像未压缩的代码一样&#xff0c;方便调试和定位错误。然而&#xff0c;在生产环境中我们通常不需要这些文件&#xff0c;因为它们会增加应用程序的体积。 可以在vue.config.js…

MySQL-多表查询:多表查询分类、SQL99语法实现多表查询、UNION的使用、7种SQL JOINS的实现、SQL99语法新特性、多表查询SQL练习

多表查询 1. 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3 案例分析与问题解决 2. 多表查询分类讲解分类1&#xff1a;等值连接 vs 非等值连接等值连接非等值连接 分类2&#xff1a;自连接 vs 非自连接分类3&#xff1a;内连接…

团结引擎+OpenHarmony 1配置篇

团结引擎OpenHarmony 1 配置篇 app团结鸿蒙化第一课一 DevEco Studio 下载安装二 团结引擎三 出包 app团结鸿蒙化第一课 1 团结引擎配置2 DevEco Studio 配置 一 DevEco Studio 下载安装 申请开发者套件 1 注册华为账号 签署协议 官网 2 认真填写 DevEco Studio 开发套件申请…

高清4路HDMI编码器JR-3214HD

产品简介&#xff1a; JR-3214HD四路高清HDMI编码器是专业的高清音视频编码产品&#xff0c;该产品具有支持4路高清HDMI音视频采集功能&#xff0c;4路3.5MM独立外接音频输入&#xff0c;编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质…

预约系统的使用

预约系统的使用 目录概述需求&#xff1a; 设计思路实现思路分析1.用户年规则 在 预约系统中的使用流程 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wa…

【LeetCode热题100】【二叉树】路径总和 III

题目链接&#xff1a;437. 路径总和 III - 力扣&#xff08;LeetCode&#xff09; 要从上到下找一条路径的和最简单的方法是遍历每个节点&#xff0c;然后从每个节点往下累加看看和对不对 这样是O(n&#xff09;的时间复杂度 可以计算一条路径上的前缀和方法&#xff0c;这样…

[图像处理] MFC OnMouseMove()绘制ROI矩形时的闪烁问题

文章目录 问题对策代码完整工程 结果使用Picture控件的RedrawWindow()的效果使用Dialog的RedrawWindow()的效果使用Picture控件的RedrawWindow()&#xff0c;ROI绘制到图像外的效果 结论 问题 最近想通过业余时间&#xff0c;写一个简单的图像处理软件&#xff0c;一点点学习图…

测试计划和测试报告

1、软件测试计划简介 测试计划&#xff0c;一般是主管写&#xff0c;在需求分析之后&#xff0c;测试工作开始之间做的一些准备划工作。一般包含以下内容&#xff1a;5W1H 目的、测试范围、测试进度安排、测试人员、测试环境、测试方法工具&#xff0c;风险评估 &#xff08;w…

redis知识整理

redis知识整理 什么是缓存穿透&#xff0c;怎么解决布隆过滤器 什么是缓存击穿&#xff0c;怎么解决互斥锁和分布式锁 什么是缓存雪崩&#xff0c;怎么解决Redis作为缓存&#xff0c;mysql如何与redis进行同步呢&#xff1f;&#xff08;双写一致&#xff09;一致性要求高排他锁…

如何在 MySQL 中开启日志记录并排查操作记录

在数据库管理中&#xff0c;能够追踪和审查操作记录是至关重要的。这不仅有助于识别和分析正常的数据库活动&#xff0c;还可以在数据泄露或未经授权的更改发生时进行调查和响应。本文将介绍如何在 MySQL 中开启通用日志记录&#xff0c;并如何排查操作记录。 开启 MySQL 通用…

2024/4/14周报

文章目录 摘要Abstract文献阅读题目创新点CROSSFORMER架构跨尺度嵌入层&#xff08;CEL&#xff09;CROSSFORMER BLOCK长短距离注意&#xff08;LSDA&#xff09;动态位置偏置&#xff08;DPB&#xff09; 实验 深度学习CrossFormer背景维度分段嵌入&#xff08;DSW&#xff09…

c++ 根据ip主机号和子网掩码随机生成ip

在C中&#xff0c;可以使用以下方法根据给定的IP地址和子网掩码来随机生成IP地址。这里使用了库来生成随机数&#xff0c;以及<arpa/inet.h>库来处理IP地址。 #include <iostream> #include <random> #include <arpa/inet.h>std::string random_ip(co…

面试经典150题 删除有序数组中的重复项 II

面试经典150题 day4 题目来源我的题解方法一 双指针 题目来源 力扣每日一题&#xff1b;题序&#xff1a;80 我的题解 方法一 双指针 left和right分别指向相同元素的左右边界&#xff0c;count记录重复元素的个数&#xff0c;index记录最终数组的长度。 当元素没有重复时&am…

数据库工程师题目

【软考通】 程序中全局变量的存储空间在&#xff08;B&#xff09;分配。 A 代码区 B 静态数据区 C 栈区 D 堆区 程序运行时的用户内存空间一般划分为代码区、静态数据区、栈区和堆区&#xff0c;其中栈区和堆区也称为动态数据区。全局变量的存储空间在静态数据区。 以下…

1.0 Hadoop 教程

1.0 Hadoop 教程 分类 Hadoop 教程 Hadoop 是一个开源的分布式计算和存储框架&#xff0c;由 Apache 基金会开发和维护。 Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持&#xff0c;它允许使用简单的编程模型跨计算机群集分布式处理大型数据集&#xf…

IntelliJ IDEA 配置攻略:提高开发效率的 5 个秘诀

一、前言 A. 主要介绍内容&#xff1a; 本篇博客将着重介绍如何通过高效使用 IntelliJ IDEA&#xff0c;提高开发效率以及编写出更好的代码。主要内容包括 IntelliJ IDEA 快速配置&#xff0c;自动编写代码&#xff0c;快捷代码提示&#xff0c;快速生成代码段&#xff0c;快…

SAFe认证Leading SAFe官方认证班/Leading SAFe领导大规模敏捷认证课

课程简介 SAFe – Scaled Agile Framework是目前全球运用最广泛的大规模敏捷框架&#xff0c;也是全球敏捷相关认证成长最快、最被认可、最有价值的规模化敏捷认证&#xff0c;目前全球SAFe认证专业人士已达120万人。 据官方统计&#xff0c;获得新证书的IT专业人士的平均工资…

排序算法之快速排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性快速排序O( N N N log ⁡ 2 N \log_{2}N log2​N)O( N N N log ⁡ 2 N \log_{2}N log2​N)O(n^2)O( log ⁡ 2 N \log_{2}N log2​N)In-place不稳定 稳…