【LeetCode】567. 字符串的排列
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
【LeetCode】567. 字符串的排列的更多相关文章
- Java实现 LeetCode 567 字符串的排列(滑动窗口,处理区间内的字符数量)
567. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = " ...
- Leetcode 567.字符串的排列
字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = "ab&q ...
- LeetCode:字符串的排列【567】
LeetCode:字符串的排列[567] 题目描述 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: ...
- 力扣567.字符串的排列—C语言实现
题目 来源:力扣(LeetCode)
- LeetCode 字符串的排列
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = "ab" s2 ...
- [CareerCup] 1.3 Permutation String 字符串的排列
1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...
- [Swift]LeetCode567. 字符串的排列 | Permutation in String
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. I ...
- 【剑指Offer】字符串的排列 解题报告(Python)
[剑指Offer]字符串的排列 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 剑指Offer面试题:26.字符串的排列
一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...
随机推荐
- mybatis的几种like查询
oracle数据库: Java代码 SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 Java代码 SELECT * FROM ...
- (一)【转】asp.net mvc生成验证码
网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录.留言等提交信息到服务器端处理的页面中. ...
- hanoi(老汉诺塔问题新思维)
#include <stdio.h> //第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔 int i=1;//记录步数 void move(int n, char from,cha ...
- synchronized和Lock的区别是什么?
原创2020-11-19 11:38:29011024区别:1.lock是一个接口,而synchronized是java的一个关键字.2.synchronized在发生异常时会自动释放占有的锁 ...
- 构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载.
- CyclicBarrier 和 CountDownLatch 的区别 ?
1.CountDownLatch 简单的说就是一个线程等待,直到他所等待的其他线程都执 行完成并且调用 countDown()方法发出通知后,当前线程才可以继续执行. 2.cyclicBarrier ...
- 使用docker-compose+nginx+uwsgi+django部署项目
(1)centos上下载docker + docker-compose (2)基础目录 (3)首先创建一个纯净的python+django+uwsgi的镜像,便于后期使用(也可不用创建,后期docke ...
- 什么是JDK?什么是JRE?说说它们之间的区别?
JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac,ja ...
- 二、mycat15种分片规则
一.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...
- 转载:STL四种智能指针
转载至:https://blog.csdn.net/K346K346/article/details/81478223 STL一共给我们提供了四种智能指针: auto_ptr.unique_ptr.s ...