首页 > 其他分享 >567. 字符串的排列(中)

567. 字符串的排列(中)

时间:2024-03-12 10:34:24浏览次数:16  
标签:字符 排列 窗口 s2 s1 567 need 字符串 滑动

目录

题目

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

示例 1:

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

示例 2:

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

题解:滑动窗口

class Solution:
    def checkInclusion(self, s1: str, s2: str) -> bool:
        need={}# 存储字符串 t 中各个字符的需求量
        window={}# 存储滑动窗口中各个字符的出现次数
        for c in s1:#遍历字符串t
            need.setdefault(c,0)#访问不存在的键时自动创建并将值设置为 0
            need[c]+=1# 统计字符串 t 中各个字符的需求量
        left=0# 滑动窗口的左指针
        right=0# 滑动窗口的右指针
        valid=0# 记录满足需求的字符数
        while right<len(s2):
            c=s2[right]# 当前字符
            right+=1# 右指针右移
            if c in need:#当前字符是目标字符中的
                window.setdefault(c,0)#访问不存在的键时自动创建并将值设置为 0
                window[c]+=1# 更新滑动窗口中当前字符的出现次数
                if window[c]==need[c]:# 如果滑动窗口中当前字符的出现次数达到需求量,增加满足需求的字符数
                    valid+=1
            while right -left>=len(s1):#当窗口大小大于s1时
                if valid == len(need):#每个字符的次数都达到了要求
                    return True
                d=s2[left] # 将要移出窗口的字符
                left+=1# 左指针右移
                if d in need:#当前字符是目标字符中的
                    if window[d]== need[d]:#如果滑动窗口中当前字符等于目标字符的值
                        valid-=1# 如果移出窗口的字符导致窗口不再满足需求,则减少满足需求的字符数
                    window[d]-=1# 更新滑动窗口中移出字符的出现次数
        return False

标签:字符,排列,窗口,s2,s1,567,need,字符串,滑动
From: https://www.cnblogs.com/lushuang55/p/18067750

相关文章

  • Qt 将16进制的内容的QString字符串转为QByteArray数组
    1.QString存储十六进制内容我要发送的十六进制内容是0105040100将其储存在QString字符串中1QStringstr;2str="0105040100";2.核心语句将两位的字符串转换为16进制的Int型数字,然后通过强制类型转换成char类型的字符。(具体作用方式我还没去看,但是有用)(char)str.m......
  • Java的结构、equals字符串判断与反编译
    顺序结构Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构代码举例publicclas......
  • 解决一次前端渲染时,把字符串原有空格去掉的问题
    问题回顾:前端在渲染时,会自动把字符串的空格忽略掉: 百度了下,全都是用js把原字符的空格去掉,但这并不是我想要的 解决方式:在偿试查阅资料后,发现新大陆,原来只要在对面的元素加上css样式即可:style="white-space:pre;" ......
  • delphi 中 StringHelper 详解,字符串常见操作
    大小写转换functionToLower:string;functionToLower(LocaleID:TLocaleID):string;functionToLowerInvariant:string;functionToUpper:string;functionToUpper(LocaleID:TLocaleID):string;functionToUpperInvariant:string;classfunctionLowerCase(const......
  • shell 给字符串双引号,并去除多余的空格
    用到的命令:echo输出字符串tr常用于处理字符串间隔,例如将空格分割替换为逗号分割;删除多个连续的空格等等sed也是用于字符串处理。如字符串替换,也可做字符串删除awk也用于字符串处理。如将字符串按照空格等分隔符,分成好几列,按需输出某一列的值;字符计数,统计次数;复杂的字符串......
  • 郑莉cpp习题6-22 用递归算法翻转字符串s
    郑莉cpp习题6-22  用递归算法翻转字符串s#include<iostream>usingnamespacestd;#include<string>voidreverse(string&s,intleft,intright){chart;if(left<right){t=s[left];s[left]=s[right];s[right......
  • Mysql如何给字符串添加索引(前缀索引)
    在日常开发中,我们经常给字符串添加索引,那么给字段添加索引有什么技巧吗,我们看看下面的例子,我们给一个邮箱添加索引,应该如何添加呢看看下面这条sqlselect*fromuserwhereemail='[email protected]'如果我们不添加索引,肯定是要进行全表扫描的,那么我们如何添加呢有两种方式a......
  • vs2019单独重新安装python37_64失败解决办法(bilibili上我最早写的是https://www.bilib
    上个周末的时候,我发现用vs2019编写python的时候。代码高亮出现了奇怪的问题,进入解决方案的时候,print还是蓝色的,但是过了几秒钟后就变为黑色了,因此在最开始的时候我试图通过换一个皮肤和在管理扩展里面找扩展来解决,但是还是有相关问题。于是到vs2019对应的python文件夹找问题,目录是......
  • python字符串截取
    python中字符截取[-1]、[:-1]、[::-1]、[n::-1]等使用方法的详细讲解(建议留存)-@小浩-博客园(cnblogs.com)str(df.loc[df.目的地.isnull(),'路线名'].values)#表示提取出目的地为空的路线名的值并将他变成字符串#上面的提取方式是在只有一行的情况下,如果是多行就要用......
  • C#去掉字符串中指定字符
    首先加上引用usingSystem.Text.RegularExpressions;如果要去掉[]需要转义\[\]1.stringstr="as[a]fd";Regexreg=newRegex(@"[\[\]]");//去掉[]stringa1=reg.Replace(s......