567. 字符串的排列(c++)滑动窗口

给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。

换句话说,s1 的排列之一是 s2 的 子串 。

示例 1:

输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").

示例 2:

输入:s1= "ab" s2 = "eidboaoo"
输出:false

提示:

  • 1 <= s1.length, s2.length <= 104
  • s1 和 s2 仅包含小写字母

初始化哈希表:两个向量 hashmap1 和 hashmap2 被初始化为大小为26,所有元素的初始值都为0。这些向量用于计算字符串 s1 和 s2 中每个字符的出现次数

vector<int> hashmap1(26, 0);
vector<int> hashmap2(26, 0);
 

检查长度:比较 s1 和 s2 的长度。如果 s1 的长度大于 s2 的长度,则函数返回 false。这是因为如果 s1 比 s2 长,那么 s1 不能是 s2 的排列

int n = s1.size();
int m = s2.size();
if (n > m) {
    return false;
}
 

 计算字符出现次数:遍历字符串 s1 和 s2,使用哈希表 hashmap1 和 hashmap2 计算每个字符的出现次数。

 for (int i = 0; i < n; ++i) {
    hashmap1[s1[i] - 'a']++;
    hashmap2[s2[i] - 'a']++;
}

比较哈希表:在计算出现次数后,代码比较了两个哈希表。如果它们相等,那么意味着 s1 是 s2 的排列,因此函数返回 true。 

 if (hashmap1 == hashmap2) {
    return true;
}

滑动窗口技术:如果字符串的长度相等但哈希表不相等,则使用滑动窗口技术来检查排列。窗口大小为 n,即 s1 的长度。代码遍历 s2,更新窗口的哈希表并将其与 hashmap1 进行比较。如果它们在任何时候相等,函数返回 true

for (int i = n; i < m; ++i) {
    hashmap2[s2[i] - 'a']++;
    hashmap2[s2[i - n] - 'a']--;

    if (hashmap1 == hashmap2) {
        return true;
    }
}
 

 具体代码如下:

class Solution {
public:bool checkInclusion(string s1, string s2) {vector<int> hashmap1 (26, 0);vector<int> hashmap2 (26, 0);int n = s1.size();int m = s2.size();if(n>m){return false;}for (int i = 0; i < n; ++i) {hashmap1[s1[i]-'a']++;hashmap2[s2[i]-'a']++;}if (hashmap1 == hashmap2) {return true;}for (int i = n; i < m; ++i) {hashmap2[s2[i]-'a']++;hashmap2[s2[i - n]-'a']--;if (hashmap1 == hashmap2) {return true;}}return false;}
};

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

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

相关文章

OSI参考模型中数据的封装和解封过程

OSI&#xff08;开放系统互联&#xff09;参考模型是一种网络协议分层架构模型&#xff0c;它将网络通信过程划分为七个层次。数据在每一层都要进行相应的封装处理&#xff0c;具体过程如下&#xff1a; 1. 应用层&#xff08;Application Layer&#xff09; 功能&#xff1a…

最小堆的数组实现

堆是一棵完全二叉树&#xff0c;之所以需要堆&#xff0c;是因为我们需要堆序性&#xff0c;堆的父节点都大于或小于其子节点&#xff0c;这样的有序性能让我们快速找到最大值或最小值&#xff0c;即根节点&#xff0c;时间复杂度是O&#xff08;1&#xff09; 由于完全二叉树…

TS tsconfig.json配置项

files - 设置要编译的文件的名称&#xff1b;include - 设置需要进行编译的文件&#xff0c;支持路径模式匹配&#xff1b;exclude - 设置无需进行编译的文件&#xff0c;支持路径模式匹配&#xff1b;compilerOptions - 设置与编译流程相关的选项。 compilerOptions&#xff…

Windows下安装部署rocketmq

1.1.下载安装rocketmq 下载 | RocketMQ 下载完后解压到自定义目录&#xff0c;MQ解压路径\rocketmq-all-4.6.0-bin-release&#xff1b;&#xff08;Windows10系统解压路径不要出现空格&#xff09; 1.2.配置环境变量 配置环境变量&#xff0c;变量名&#xff1a;ROCKETM…

python输出水仙花数两种方法

在Python中&#xff0c;可以使用数学优化方法来输出所有的水仙花数。水仙花数是指一个三位数&#xff0c;其各位数字的立方和等于该数本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 下面我们介绍两种主要方法来输出所有的水仙花数。 方法一&…

深入探索C/C++内存管理

目录 C/C内存分布 C语言中动态内存管理方式 calloc realloc free C中动态内存管理方式 new和delete操作内置类型 new和delete操作自定义类型 operator new和operator delete函数 new和delete的实现原理 内置类型 自定义类型 定位new和表达式(placement-new) 常见面试…

C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

机器学习之词袋模型

目录 1 词袋模型基本概念 2 词袋模型的表示方法 2.1 三大方法 1 独热表示法&#xff08;One-Hot&#xff09; 2 词频表示法&#xff08;Term Frequency, TF&#xff09; 3 词频-逆文档频率表示法&#xff08;TF-IDF&#xff09; 2.2 例子 1 词袋模型基本概念 词袋模型&a…

《Effective Objective-C 2.0》读书笔记——熟悉Objective-C

目录 第一章&#xff1a;熟悉Objective-C第1条&#xff1a;了解Objective-C语言的起源第2条&#xff1a;在类的头文件中尽量少引入其他头文件第3条&#xff1a;多用字面量语法&#xff0c;少用与之等价的方法第4条&#xff1a;多用类型常量&#xff0c;少用#define预处理指令第…

LocalDateTime入参反序列化(新增LocalDate处理)和springBoot long类型 长id 到前端丢失精度问题

入参解析Java8时间类型失败 Caused by: java.time.format.DateTimeParseException: Text 1991-04-05 18:10:51 could not be parsed at index 10 第一种方案&#xff0c;覆盖了ObjectMapper&#xff0c;改了好几版了, package com.ruoyi.talent.config;import com.fasterxml…

社交网络安全:保护用户数据的Facebook实践

在数字化时代&#xff0c;社交网络安全成为了人们关注的焦点之一。作为全球最大的社交平台之一&#xff0c;Facebook一直在致力于保护用户数据安全和隐私。本文将探讨Facebook在社交网络安全方面的实践&#xff0c;以及它所采取的措施来保护用户数据的安全性。 1. 数据加密与隐…

软考之信息系统管理:网络基础知识

网络基础知识 计算机网络的概念和分类 网络是一些结点和链路的集合&#xff0c;计算机网络就是相互连接、彼此独立的计算机系统的集合。 按照网络的覆盖范围&#xff0c;可以将计算机网络划分为&#xff1a; 局域网城域网广域网互联网 计算机网络体系结构 OSI/RM中有七个…

AC/DC电源模块:适用于各种功率需求的电子设备

BOSHIDA AC/DC电源模块&#xff1a;适用于各种功率需求的电子设备 AC/DC电源模块是一种广泛应用于不同电子设备中的电源转换模块。它具有输出稳定、高效率、可靠性强等特点&#xff0c;适用于各种功率需求的电子设备。在本文中&#xff0c;我们将探讨AC/DC电源模块的工作原理…

亚信安慧AntDB数据库采集技术创新:ACC从Java到Go的转型之路

传统的指标采集方法通常使用一些命令行工具&#xff0c;如top、free等来获取系统的性能数据。然而&#xff0c;这种方法存在一些缺点。首先&#xff0c;这些命令行工具输出的数据格式通常是文本形式&#xff0c;需要进行解析和处理才能得到有用的信息&#xff0c;这增加了开发者…

计算机网络-BGP概述

一、概述 到目前为止我们已经学习了静态路由、OSPF、RIP、IS-IS了&#xff0c;前面我们也了解到按照区域或者范围来分&#xff0c;路由协议可以划分为&#xff1a;IGP内部网关协议、EGP外部网关协议&#xff0c;而我们前面学习的动态路由都属于IGP的范畴. IGP是用于单一自治系统…

科技赋能,拓宽生活边界

在当今多元化与快速变化的社会中&#xff0c;社会适应能力成为了衡量个人能否顺利融入社会、享受生活品质的关键指标。对于盲人朋友而言&#xff0c;这一能力尤为重要&#xff0c;它不仅关乎日常生活的便利&#xff0c;更影响到心理的健康与社会参与度。在此背景下&#xff0c;…

el-upload上传图片,视频可获取视频时长。

对element-ui组件的upload组件再一次封装&#xff0c;简单记录。下面是效果图。 注意点&#xff1a;该组件现在仅支持单图和单个视频上传。 <template><div :style"myStyle"><divclass"uploads":style"{width: upWith px,height: up…

代码随想录算法训练营第36期DAY36

贪心好难&#xff0c;希望能坚持到柳暗花明那天。 DAY36 1005K次取反后最大化的数组和 自己的方法&#xff0c;注意越界条件放在最前面就好&#xff1a; class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { //自己的…

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…