当前位置: 首页 > news >正文

子串判断

KMP 算法

题目描述
现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。

给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000。

测试样例:
["a","b","c","d"],4,"abc"
返回:[true,true,true,false]

KMP

# -*- coding:utf-8 -*-

class Substr:
    
    def getNext(self, s):
        nexts = [-1 for ss in s]
        j = 0
        k = -1
        while j<len(s)-1:
            if k == -1 or s[j] == s[k]:
                nexts[j+1] = k+1
                j += 1
                k += 1
            else:
                k = nexts[k]
        return nexts
    
    def find(self, source, desc, nexts):
        sL = len(source)
        dL = len(desc)
        i = 0
        j=0
        while i<sL and j<dL:
            if j==-1 or source[i] == desc[j]:
                i += 1
                j += 1
            else:
                j = nexts[j]
        if j==dL:
            return i-j
        return -1
                
    
    def chkSubStr(self, p, n, s):
        # write code here
        maps = {}
        result = []
        for pp in p:
            maps[pp] = self.getNext(pp)
            if self.find(s,pp,  maps[pp]) != -1:
                result.append(True)
            else:
                result.append(False)
        return result

相关文章:

  • arm汇编程序中的[|]
  • 实时中位数
  • 【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误...
  • 约瑟夫问题
  • C#实现UDP分包组包
  • tomcat 集群搭建
  • 善变的同伴
  • IDC:PC 今年第一季度出货量继续下滑趋势,比起去年同期跌了13.9%
  • 非递归中序,后序遍历二叉树
  • Eclipse安装aptana
  • udp datetime服务
  • linux信号浅谈
  • hdu 2142 Can you find it?
  • 线程锁
  • Linux下禁用独立显卡
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • create-react-app项目添加less配置
  • CSS实用技巧干货
  • Fabric架构演变之路
  • flask接收请求并推入栈
  • Java 23种设计模式 之单例模式 7种实现方式
  • MySQL QA
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端攻城师
  • 深入浏览器事件循环的本质
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 主流的CSS水平和垂直居中技术大全
  • 大数据全解:定义、价值及挑战
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #define 用法
  • #pragma data_seg 共享数据区(转)
  • ( 10 )MySQL中的外键
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)(1.9) MSP (version 4.2)
  • (1)虚拟机的安装与使用,linux系统安装
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (9)STL算法之逆转旋转
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (JS基础)String 类型
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)iOS字体
  • (转载)虚函数剖析
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **CI中自动类加载的用法总结
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • @RequestMapping 的作用是什么?