567. Permutation in String 字符串的排列

题目要求判断字符串s2是否包含s1的排列。理解关键在于排列不会改变字符个数,只需双指针滑动窗口遍历,确保s1所有字符种类在s2中出现并计数。通过python实现,不断移动左右边界进行判断。
摘要由CSDN通过智能技术生成

在这里插入图片描述

题目搬运者

https://leetcode-cn.com/problems/permutation-in-string/
【吃了没文化的亏】 
给定两个字符串s1和s2,如果s2包含s1的排列则返回true,否则返回false。
换句话说,如果s1的排列中有一个是s2的子串,则返回true。
题意理解:此题说的是s2包含s1的排列,而排列不会改变字符串中每个字符的个数,所以只有当两个字符串每个字符的个数均相等时,一个字符串才是另一个字符串的排列。
吃了没文化的亏,没理解好s2包含s1的排列的意思,以为就是按子串顺序包含的关系,再不济按题目给的例子就是加个逆序。

思路 【双指针,滑动窗口】

思路是官方爸爸给的,但是自己用python写了一遍。到底还是要动手呀

  1. 循环一遍子串S1数组,记录字符个数
  2. 再循环一遍记录S1频数的数组,记录字符种类
  3. 先开始移动右边界,直到所有sub数组里的字符的种类都出现再了str数组的滑动范围里。
  4. 再判断此时的滑动范围是否和sub数组的长度一致;
    不一致的话,移动左边界,再进行判断,左边界被删掉子串里是否是sub里的字符
    若此时某个字符的频数不达标,strcount-=1
  5. 继续开始循环,交替移动左右指针
class Solution(object):
    def checkInclusion(self, s1, s2):
        """
        :type s1: str
        :type s2: str
        :rtype: bool
        """
        # s1 子串 sub
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值