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

567. 字符串的排列

时间:2023-11-17 21:56:06浏览次数:31  
标签:needs 排列 s2 s1 567 window right 字符串 c1

  1. 字符串的排列

给你两个字符串 s1s2 ,写一个函数来判断 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
  • s1s2 仅包含小写字母
class Solution(object):
    def checkInclusion(self, s1, s2):
        """
        :type s1: str
        :type s2: str
        :rtype: bool
        """
        window = {}
        needs = dict((i, s1.count(i)) for i in s1)
        left = 0
        right = 0

        valid = 0
        while right < len(s2):
            c1 = s2[right]
            right += 1

            if c1 in needs.keys():
                window[c1] = window.get(c1, 0) + 1
                if window[c1] == needs[c1]:
                    valid += 1
            
            while valid == len(needs):

                if right - left == len(s1):
                    return True
                
                c2 = s2[left]
                left += 1
                if c2 in needs.keys():
                    window[c2] -= 1
                    if window[c2] < needs[c2]:
                        valid -= 1
                        
        return False
            


标签:needs,排列,s2,s1,567,window,right,字符串,c1
From: https://www.cnblogs.com/mrmrwjk/p/17839750.html

相关文章

  • 找到字符串中所有字母异位词
    找到字符串中所有字母异位词给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。示例1:输入:s="cbaebabacd",p="abc"输出:[0,6]解释:起始索引等于0......
  • PTAC语言删除字符串中的字串
    这是题目。初见觉得还好,谁知道越分析越操蛋暗含深意。仔细看,假设我们通过遍历s1删除了两个显性的cat,哎,剩下的是什么Tomisamalecat咋样,牛逼不。说明这题肯定会出现删除一次不够的样例sample。假设我们熟知C语言中#include<string.h>中的strcat,strstr,strcpy等函数,那么这题可以比......
  • P1098 [NOIP2007 提高组] 字符串的展开(总结)
    P1098[NOIP2007提高组]字符串的展开http://ww.luogu.com.cn/problem/P1098注意字符中的数字是默认小于字母的。所以要对数字做特判。#include<iostream>#include<string>usingnamespacestd;intmain(){ intp1,p2,p3; cin>>p1>>p2>>p3; strings; cin......
  • 无涯教程-D语言 - 字符串(Strings)
    字符数组我们可以用以下两种形式来表示字符数组.第一种形式直接提供大小,第二种形式使用dup方法创建字符串"Goodmorning"。char[9]greeting1="Hellolearnfk";char[]greeting2="Goodmorning".dup;这是使用上述简单字符数组形式的简单示例。importstd.stdio;voidm......
  • 电脑网站支付报错“验签出错,建议检查签名字符串或私钥与应用公钥是否匹配”问题解决记
    在对接支付宝电脑网站支付的时候,遇到如下报错:“错误代码invalid-signature错误原因:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”。但展示的报错内容跟实际原因有所出入(在下文中有解答),这里记录下问题的解决排查过程。问题复现在对接电脑网站支付时,生成form表单......
  • 来自 szc 的字符串和搜索的总结
    膜拜szc大佬。原链接。题单+代码哈希普通哈希不讲了,讲讲树哈希。对于判断一对同构树,要考虑相同结构的儿子在两类树的不同位置。此时有两种方法,一种是正常的按序哈希,我们很好想到在哈希时对儿子节点的哈希值进行排序,规定一个顺序塞进去。另一种方法则是不使用多项式哈希,对......
  • 151. 反转字符串中的单词
    2023-11-17思路:调用库函数+利用正则表达式利用栈双端队列头插链表利用数组总长度不知道按最大长度10^4利用list进阶:字符串可变时,Java不行,双指针,先整体反转,再逐个反转单词可以将空间复杂度降低 数组:classSolution{publicStringreverseWor......
  • 7-5 字符串排序
    目录目录目录题目代码思路第一次错误尝试错误原因正确代码运行结果关于二维数组的函数引用题目本题要求编写程序,读入5个字符串,按由小到大的顺序输出。输入格式:输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。输出格式:按照以下......
  • 字符串哈希算法
    一、字符串哈希:将一串字符串映射成一个整数,并用它来代替字符串进行比较。这样俩个字符串的比较就变成俩个整数的比较,可以将时间复杂度减少至O(1)二、哈希函数:为了将字符串转化为整数,需要一个哈希函数hash,使得以下条件成立:如果字符串s==t那么hash(s)==hash(t)。一般情况下采......
  • 求删除k个字母后的最小字典序字符串
    对于一个字符串来说我们要找删除k个字母后的最小字典序字符串来说,我们肯定是从前往后来删除,如果遇见前一个字母比后一个字母(字典序)大,那就删除前一个。对于此来说我们用一个vector来维护,vector就是存的答案,如果vector的最后一个字母比枚举的字母大,那就删除最后一个。vector<c......