567. 字符串的排列

知识点:字符串;滑动窗口

题目描述

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

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

示例
示例 1:
输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba") 示例 2:
输入:s1= "ab" s2 = "eidboaoo"
输出:false

解法一:滑动窗口

这其实也是滑动窗口的一道典型题目

注意题目中,排列的顺序不同可以算正确答案,所以只需要s1字典和当前窗口内的字典一模一样(含有的key相同,value也相同)即可了。

所以可以直接维持一个长度是s1的滑动窗口,并且统计窗口内的字典,然后和s1的字典比较即可了;

if两者一样,那直接返回即可

if两者不一样,那这个窗口移动,左、右都移动一个距离;

from collections import Counter, defaultdict
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
count_s1 = Counter(s1) #s1中的字符数量
start = 0
count_s2 = Counter(s2[start:len(s1)-1])
for i in range(len(s1)-1, len(s2)):
count_s2[s2[i]] += 1
if count_s1 == count_s2:
return True
else:
count_s2[s2[start]] -= 1
if count_s2[s2[start]] == 0:
count_s2.pop(s2[start])
start += 1
return False

最新文章

  1. php环境的搭建
  2. No identities are available for signing的解决方法
  3. 了解真实的『REM』手机屏幕适配
  4. 在 Amazon AWS 搭建及部署网站:(一)申请、设置 AWS 服务
  5. 三星Mega 6.3(i9200)删除kingroot
  6. NOI 2015 T1 等式
  7. Python相关项目和技术
  8. 用定时器T0查询方式P0口8位控制LED闪烁
  9. Blend4精选案例图解教程(二):找张图片玩特效
  10. Node笔记四
  11. spring boot vuejs
  12. CodeForces 900D Unusual Sequences
  13. linux iptables 防火墙简介
  14. 【转】JavaScript数组方法大全
  15. 从MediaStorehe和sd中删除媒体文件
  16. SQL SERVER 数据库字段简单加密解密
  17. 【MySQL】MySQL之MySQL5.7安装包(msi文件)在Windows8下安装
  18. 修改JS文件不能及时在页面中体现,需重启浏览器?
  19. PKU2503_map应用
  20. 【转】 PreTranslateMessage作用和使用方法

热门文章

  1. xilinx SDK在线仿真_烧写 提示失败
  2. Linux C申请内存三种基本方式
  3. Java基础(补充)
  4. java-规约-集合
  5. 什么是 Spring Cloud?
  6. mybatis插件机制原理
  7. Redis List Type
  8. volatile 类型变量提供什么保证?
  9. 数据分析之Pandas操作
  10. 爬虫-数据解析-xpath