博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】30. Substring with Concatenation of All Words
阅读量:5884 次
发布时间:2019-06-19

本文共 1228 字,大约阅读时间需要 4 分钟。

题目如下:

 

解题思路:本题题干中有一个非常关键的前提,就是words中的所有word的长度一样,并且都要被使用到。所以,我们可以把输入的s按word的长度进行等分,以s = "barfoothefoobarman",words = ["foo","bar"]为例,下表是等分的结果。为什么只分到startInx=[0,2]? 因为word的长度就是3,startInx = 3是startInx = 0的子集。分解完成后,再对startInx=[0,2]中每一种分解的方法进行比对。例如startInx = 0的时候,因为words的长度是2,所以用word1和word2组成集合和words比对,比对完成后记录结果,同时删除word1,把word3加入集合,直到wordn加入集合为止。这样就能得到所有能满足题意的all starting indices of substring(s) in s。

代码如下:

class Solution(object):    def findSubstring(self, s, words):        """        :type s: str        :type words: List[str]        :rtype: List[int]        """        import bisect        if len(words) == 0:            return []        words.sort()        res = []        length = len(words[0])        for i in range(length):            start = i            l = []            ol = []            while start + length <= len(s):                l.append(s[start:start+length])                bisect.insort_left(ol,s[start:start+length])                start += length                if len(l) == len(words):                    if ol == words:                        res.append(start - length*len(l))                    del ol[bisect.bisect_left(ol,l.pop(0))]        return res

 

转载于:https://www.cnblogs.com/seyjs/p/9660599.html

你可能感兴趣的文章
关于DLL文件和EXE文件不在同一目录下的设置
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 密码强化、网络安全强化...
查看>>
web 开发之js---ajax 中的两种返回状态 xmlhttp.status和 xmlhttp.readyState
查看>>
TeX
查看>>
【Machine Learning in Action --2】K-最近邻分类
查看>>
cocos2dx3.1.1+cocosstudio+lua问题总结
查看>>
漫游Kafka设计篇之性能优化(7)
查看>>
MVC在添加控制器的时候发现没有添加的选项了?肿么办?
查看>>
Android AndroidManifest.xml配置文件
查看>>
[原创]自定义BaseAcitivity的实现,统一activity的UI风格样式
查看>>
C# LDAP认证登录
查看>>
spark源码 hashpartitioner
查看>>
Vue文件跳转$router传参数
查看>>
gitlab简单使用教程【转】
查看>>
《荣枯鉴》闻达卷二
查看>>
Java 8 新特性-菜鸟教程 (0) -Java 8 新特性
查看>>
使用R语言的RTCGA包获取TCGA数据--转载
查看>>
Android studio 3+版本apk安装失败问题
查看>>
PostgreSQL性能极限
查看>>
从舌绛如火说开去
查看>>