lc567.字符串的排列

news/2024/11/25 10:14:26/

给你两个字符串 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 仅包含小写字母

思路:全排列肯定不可取,长度是10**4;本题采用滑动窗口

不妨令s1的长度<=s2的长度(如果大于s1就肯定不是s2的子串了)

令s1的长度为n,s2的长度为m

如果s1是s2的一种排列子串,意味着可以在s2字符串中找到一段长度为n符合条件的字符串

两个约束条件:1:长度为n

2:符合条件:即s1可以经过排列形成s2那段字符串

约束1好办,先看约束2,如果用全排列枚举的思路,是不可取的;

那么可以这样想,题目说,s1,s2仅包含小写字母,那么

创建两个统计数组(统计每个字符出现的次数) c1,c2

 如果c1=c2 ,那么意味着s1,s2的组成元素相同,即可以通过排列相互转化,即符合题意;

预处理:统计从左往右s1,s2前n个字符分别出现的次数,存入到c1,c2;

如果c1=c2,直接返回return ,否则,滑动窗口进场;

字符串s2第一段长度为n的字符串,是下标从[0,n-1],那么第二段就是[1,n]..

如何得到新的一段滑动窗口的组成部分呢?

删除上一个滑动窗口的第一个元素,加入上一个滑动窗口的最后一个元素的后一个元素

每次得到一段滑动窗口对应的记录数组

只要c2=c1直接返回

如果滑动到底部了还没有return true

直接return false

class Solution {
public:bool checkInclusion(string s1, string s2) {int l1 = s1.size(),l2 = s2.size();if (l1>l2) return false;vector <int> c1(26),c2(26);for (int i = 0;i<l1;i++){c1[s1[i]-'a']++;c2[s2[i]-'a']++;}if (c1 == c2) return true;//前半部分for (int i =1;i+l1<=l2;i++)//后半部分{c2[s2[i-1]-'a']--;c2[s2[i+l1-1]-'a']++;if (c1 == c2) return true;}return false;}
};


http://www.ppmy.cn/news/301912.html

相关文章

567.字符串的排列

难度&#xff1a;中等 目录 一、问题描述 二、解题思路 1、思路 三、解题 1、代码实现 2、时间复杂度 and 空间复杂度 一、问题描述 这里直接采用LeetCode上面的问题描述。 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。如果是&#…

backtrack3安装使用教程

一、准备篇 1、一个有可破解无线信号的环境。如我在家随便搜索出来的信号。 2、带无线网卡的电脑一台&#xff08;笔记本台式机均可&#xff0c;只要无线网卡兼容BT3&#xff09;&#xff0c;我用的是三星R467的上网本。  3、2G以上优盘一个&#xff08;我用的是2G的&#x…

【Spring源码解读三】IoC容器之AnnotationConfigApplication的refresh()刷新方法其二

invokeBeanFactoryPostProcessors() PriorityOrdered接口 Ordered接口 invokeBeanDefinitionRegistryPostProcessors() registerBeanPostProcessors() getBeanNamesForType() initMessageSource() initApplicationEventMulticaster() onRefresh() registerListeners()…

云台和华为p30pro_Vlog利器 大疆新微单云台2299元!买!必须买!

01大疆新微单云台2299元&#xff01; 大疆创新通过线上发布的方式正式发布如影Ronin-SC云台(简称如影SC)&#xff0c;单手持微单稳定器如影SC&#xff0c;如影SC专为微单相机打造&#xff0c;轻巧便携的机身集成了强大的产品性能&#xff0c;而如影系列在视频行业中拥有大批的粉…

php擂台赛,「较量」Vlog 视频最强机器擂台赛,究竟哪款最适合你

最近 Vlog 非常流行&#xff0c;今天&#xff0c;我们就来对比一下目前市面上一些主流的 Vlog 设备。我们今天主要来看一看小型便携运动相机&#xff0c;在 Vlog 制作时的表现如何&#xff0c;究竟哪一款最值得大家入手。我们先说下市面上又红又紫的两款产品&#xff0c;大疆 O…

第 1 集:招聘风云!

我原本以为我进了一家创业公司,从此走向摸鱼巅峰。 却不曾想,一个人一干就是一年,第二年,领导看出我想走的架势,仅仅给我新增了一个初级测试! 第三年的某一次迭代,需求的规模彻底倾覆我的抗压能力。 本着不给人就吓吓领导的想法。 我忐忑的走向桌对面:「领导,实在…

JS 校验手机号码

js手机号码的校验 /** 判断字符串是否是手机号码&#xff0c;若是则返回true,若否则返回false **/ function isPhone(phone){ return /^1(3\d|4\d|5\d|6\d|7\d|8\d|9\d)\d{8}$/g.test(phone); }