Python KMP算法

KMP算法(Knuth-Morris-Pratt算法)是一种用于在字符串中查找子字符串的高效算法,它利用了已匹配的部分信息来避免不必要的回溯。下面是一个示例代码,展示如何使用Python实现KMP算法:

cpp 复制代码
def compute_lps(pattern):
    lps = [0] * len(pattern)
    j = 0
    i = 1
    while i < len(pattern):
        if pattern[i] == pattern[j]:
            j += 1
            lps[i] = j
            i += 1
        else:
            if j != 0:
                j = lps[j - 1]
            else:
                lps[i] = 0
                i += 1
    return lps

def kmp_search(text, pattern):
    lps = compute_lps(pattern)
    i = 0
    j = 0
    while i < len(text):
        if text[i] == pattern[j]:
            i += 1
            j += 1
        if j == len(pattern):
            print("Pattern found at index", i - j)
            j = lps[j - 1]
        elif i < len(text) and text[i] != pattern[j]:
            if j != 0:
                j = lps[j - 1]
            else:
                i += 1

# 测试示例
text = "ABABDABACDABABCABAB"
pattern = "ABABCABAB"
kmp_search(text, pattern)

在上面的示例中,compute_lps函数用于计算给定模式字符串的最长公共前缀和后缀的长度(LPS数组),而kmp_search函数则利用LPS数组来实现KMP算法的字符串匹配。在测试示例中,我们在文本字符串中搜索模式字符串,并打印出匹配的索引位置。

KMP算法的关键在于构建LPS数组,该数组可以帮助我们在匹配过程中跳过一些不必要的比较。这样可以提高字符串匹配的效率。

相关推荐
一雨方知深秋2 分钟前
二.java程序基本语法
java·类型转换·变量·方法·运算符·字面量·关键字标识符
啊阿狸不会拉杆3 分钟前
《数字图像处理 》 第 1 章-绪论
图像处理·python·opencv·算法·数字图像处理
Java程序之猿6 分钟前
Springboot 集成apache-camel +mqtt 根据主题处理mqtt消息
java·spring boot·后端
智驱力人工智能9 分钟前
加油站静电夹检测 视觉分析技术的安全赋能与实践 静电夹检测 加油站静电夹状态监测 静电接地报警器检测
人工智能·深度学习·算法·安全·yolo·边缘计算
断剑zou天涯17 分钟前
【算法笔记】线段树SegmentTree
数据结构·笔记·算法
小白勇闯网安圈17 分钟前
upload、very_easy_sql、i-got-id-200
python·网络安全·web
石国旺17 分钟前
python打包PyInstaller程序,怎么越来越大,如何解决?
开发语言·python
python-码博士25 分钟前
关于sklearn中StandardScaler的使用方式
人工智能·python·sklearn
悟空码字28 分钟前
SpringBoot 整合 ElasticSearch,给搜索插上“光速翅膀”
java·后端·elasticsearch
江公望29 分钟前
PyWebview浅谈
python