技术标签: LeetCode
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string’s permutations is the substring of the second string.
Example 1:
Input: s1 = “ab” s2 = “eidbaooo”
Output: True
Explanation: s2 contains one permutation of s1 (“ba”).
Example 2:
Input:s1= “ab” s2 = “eidboaoo”
Output: False
Constraints:
The input strings only contain lower case letters.
The length of both given strings is in range [1, 10,000].
使用前后指针表示窗口。
需要注意的是,l 缩小窗口只需窗口大小大于 s1.size() ,而且当发现 valid == len(need)时,就说明窗口中就是一个合法的排列,应立即返回 true。
class Solution(object):
def checkInclusion(self, s1, s2):
"""
:type s1: str
:type s2: str
:rtype: bool
"""
need = dict()
windows = dict()
for i in s1:
if i in need:
need[i] += 1
else:
need[i] = 1
for i in s2:
windows[i] = 0
l ,r = 0,0
valid = 0
while r < len(s2):
c = s2[r]
r += 1
if c in need:
windows[c] += 1
if windows[c] == need[c]:
valid += 1
while r - l >= len(s1):
if valid == len(need):
return True
d = s2[l]
l += 1
if d in need:
if windows[d] == need[d]:
valid -= 1
windows[d] -= 1
return False
申耀的科技观察读懂科技,赢取未来!毫无疑问,在中国科技的产业发展中,底层基础软件一直是一大“短板”,特别在求解器软件领域,不仅技术门槛较高、相关人才也极为稀少,同时全球求解器市场更被IBM...
Minkowski sums and differencesThere are many ways to do collision detection, but a fairly general one is Minkowski differences. The idea is that you do a binary operation on two shapes to get a new s...
使用Thread类 开启线程例子例子1static void Main(string[] args) { //第一种方式 Thread t = new Thread(DownLoadFile); t.Start(); Console.WriteLine("Main");
1. 在聚合父类总工程中引入pom <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <co
一:实现一对一关联 MyBatis如何使用关联表查询: 1.创建表和数据(我们假设创建一张教师表和班级表,假设一个老师带一个班,那么老师和班级就是一对一的关系)便之间的关系如下: 2.定义实体类 Class实体类: Teacher实体类: 2.定义映射文件: 3.再将应用文件中注册映射文件 4.定义单元测试编码: MyBatis...
1、迭代器的概念迭代器iterator是C++STL的组件之一,作用是用来遍历容器,而且是通用的遍历容器的方式。说到C++STL组件就不得不提一下C++STL的六大组件了,它们分别是:顺序/无序容器、关联容器、容器适配器、迭代器、函数对象、泛型算法。经典的迭代器遍历容器的代码如下:Vector<int>::iterator it = vec1 .begin(); for (;...
300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums
图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域的面积缩小,造成主要区域的形状发生改变;图像形态学膨胀可以扩充每一个区域的面积,填充较小的空洞,但是同样会增加噪声的面积。根据两者的特性将图像腐蚀和膨胀适当的结合,便可以既去除图像中的噪声,又不缩小图像中主要区域的面积;既填充了较小的空洞,又不增加噪声所占的面积。...
转载:https://github.com/Meituan-Dianping/walleWalle瓦力,Android Signature V2 Scheme签名下的新一代渠道包打包神器瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。Q...
声音简介㈠计算机硬件系统的组成任何一台计算机的硬件系统都是由五大部分组成,分别为运算器、控制器、存储器、输入设备和输出设备。(1)“存储程序”工作原理计算机能够自动完成运算或处理过程的基础是“存储程序”工作原理。“存储程序”工作原理是美国匈牙利科学家冯·诺依曼提出来的,故称为冯·诺依曼原理,其基本思想是存储程序和程序控制。(2)计算机硬件系统的组成。1.运算器(ALU)运算器又称算术逻辑单元,是计...
个人认为下面这篇博文非常适合初学或者学的很浅的朋友。 转自http://www.jianshu.com/p/9dc9f41f0b29经常接触LSTM,GRU,RNN这些模型,对于LSTM的印象只是知道它用来解决梯度消失梯度爆炸问题,对于长距离的句子的学习效果不好的问题,而且大概知道里面是加了一些参数,加了门单元来选择忘记和记住一些信息。但是具体公式没有推过,所以理解的不够深。但是上面这篇长博文,作
本帖最后由 莫问刀 于 2018-8-17 09:49 编辑--------------------------------------------------------------------------------------------------------------------------------------------------------------------------...