当前位置: 首页 > 后端技术 > Java

【Java算法系列】KMP算法(三)

时间:2023-04-01 17:38:43 Java

【写在前面】《Java算法系列》目录如下(更新):数据结构相关算法八种排序算法:冒泡排序、选择排序、插入排序,希尔四种搜索算法:排序、快速排序、归并排序、基数排序、堆排序:线性搜索、二分搜索、插值搜索、斐波那契搜索九种常用算法:分治算法、动态规划算法、KMP算法、贪心算法、Prim算法、Kruskal算法、Dijkstra算法、Floyd算法、KnightTravel回溯算法本文是KMP算法中常用的九种算法。〇.基本介绍Knuth-Morris-Pratt算法,简称“KMP算法”,是一种字符串搜索算法。我们现在面临这样一个问题:有一个文本串T和一个模式串P,现在我们想找到P在T中的位置,如何找到呢?这个例子可以参考:NC149KMP算法对于这样的字符串模式匹配问题,除了KMP算法之外还有很多算法。这些算法的性能从上到下递增:Brute-ForceKMP算法Horspool算法Boyer-Moore算法Sunday算法RK算法KMP算法是非常经典的算法。但相比之下,其他算法可能更简单、更高效。至于为什么只学KMP?我也不知道(笑)。1、字符串暴力匹配算法字符串匹配的问题是在主字符串(文本,我们称之为T)中定位模式串(pattern,我们称之为P)。在开始学习KMP算法之前,请学习一下暴力匹配算法。这个算法非常简单易懂,请不要跳过,因为KMP算法是在以下代码的基础上修改的:/***用于字符串匹配(Brute-Force)的暴力匹配算法**@paramTMainstring(text)*@paramPPatternstring(pattern)*@returnpatternstring在主串中出现的位置,如果没有出现则返回-1*/publicstaticintBruteForce(StringT,字符串P){char[]t=T.toCharArray();char[]p=P.toCharArray();诠释我=0;//主字符串的位置指针intj=0;//模式字符串的位置指针while(i