首页 > 编程语言 >KMP 算法实现

KMP 算法实现

时间:2022-09-23 16:33:05浏览次数:43  
标签:相等 parent 实现 findding next 算法 str KMP ind

# coding=utf-8

def get_next_list(findding_str):
    # 求一个字符串序列每个位置的最长相等前、后缀
    j = 0  # 最长相等前缀的末位
    next = [0]  # next 数组用于保存字符串每个位置的最长相等前、后缀的长度值
    # i 是最长相等后缀的末位

    for i in range(1, len(findding_str)):
        while j > 0 and findding_str[i] != findding_str[j]:
            # 如果当前 前缀末位(j)字符与当前i位置的字符不相等时,j回退 PS:j的值也表示findding_str[:i+1]最长相等前、后缀的长度值
            j = next[j-1]
        if findding_str[i] == findding_str[j]:
            j += 1
        next.append(j)
    return next


def KMP(findding_str, next, parent_str):
    ind = 0
    for i in range(len(parent_str)):
        while parent_str[i] != findding_str[ind]:
            if ind == 0:
                break
            # parent_str[i] != findding_str[ind]  且  ind != 0 时,从findding_str[ind] 左侧的字符串的最大相等前缀处开始比较
            ind = next[ind-1]
        if parent_str[i] == findding_str[ind]:
            ind += 1
            if ind == len(findding_str):
                print(i, ind, parent_str[i - ind + 1: i+1])
                ind = 0
                # break


if __name__ == '__main__':
    parent_str = 'aabafgggahaabaafaabaahatjhrtjabaafaabaahaabaafaabaahaabaaf'
    findding_str = 'aabaaf'
    KMP(findding_str, get_next_list(findding_str), parent_str)

标签:相等,parent,实现,findding,next,算法,str,KMP,ind
From: https://www.cnblogs.com/teanon/p/16723203.html

相关文章

  • C语言经典算法100例二
    【程序21】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一......
  • 基于Ingress 实现集群服务访问
    一、前言Ingress与Ingress-controlleringress对象:指的是k8s中的一个api对象,一般用于yaml配置,如果集成了kubesphere,可以直接在UI界面上进行创建,其作用就是定义请求如何转......
  • 算法实现2D OBB碰撞
    boxusingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassDrawLine:MonoBehaviour{publicVector3[]......
  • Vue中使用benz-amr-recorder插件实现播放amr音频文件以及在线url跨域问题解决
    场景需要做一个Android端和Web端的聊天室,Android端的录音音频文件为.amr格式,除了通过后台server端转码之后,是否可以通过插件在前端直接播放amr的音频文件。benz-amr-rec......
  • Spring Boot 2.x基础教程:实现文件上传
    文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入......
  • 如何将CAD数据导入GIS软件,实现GIS+CAD空间规划一张图?
    “规划一张图管理系统”是为规划管理部门、规划设计部门研发的,管理各类规划编制成果、规划审批成果、规划监管成果以及基础地理信息数据的一张图系统。旨在建立符合国家、......
  • C语言经典算法100例
    【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#include<stdio.h>#include<stdlib.h>intmain(){inti,j,k,m;......
  • 通过vNode实现给列表字段打标签
    问题如何给列表数据打标签?类似下面这种样子......
  • 凸包算法
    凸包的概念:在某个二维平面上的给定一个点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。凸包算法从点集中获取凸包的方法比较常用的有Jarvis步......
  • 平衡二叉树 -java实现
     packagetree;/***@author:tianhaichao*@date:2022/9/2215:38*@description:平衡二叉树AVL*1、每个节点的左右子树的高度差不大于1--->|left.height......