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数组,该数组可以帮助我们在匹配过程中跳过一些不必要的比较。这样可以提高字符串匹配的效率。

相关推荐
水蓝烟雨1 分钟前
0010.三数之和
数据结构·算法·leetcode
2301_815279521 分钟前
学生党预算有限怎么选HTML函数工具_低配高性价比教程【教程】
jvm·数据库·python
devilnumber2 分钟前
java的NIO框架Netty、Mina、Grizzly 和 Jetty 四种对比
java·nio·java面试·jetty
努力进修6 分钟前
【java-数据结构】Java优先级队列揭秘:堆的力量让数据处理飞起来
java·开发语言·数据结构
亚历克斯神6 分钟前
Java 代码质量与静态分析:2026 实战指南
java·spring·微服务
@hhr6 分钟前
使用java对接火山方舟doubao-seedance-1.5-pro 模型进行视频生成
java·python·音视频
廋到被风吹走7 分钟前
【LangChain4j】Java 生态中最灵活、功能最强大的纯 Java 大模型应用开发框架(支持声明式@AiService与复杂RAG/Agent)
java·开发语言·python
2201_761040598 分钟前
如何处理SQL中的位运算_掌握BITWISE函数应用场景
jvm·数据库·python
艾克杏8 分钟前
初学Java之范型
java·开发语言
heartbeat..9 分钟前
java中常用的几种加密方式
java·开发语言