427 次查看
从文本中,我们可以生成所有后缀以构建树结构。我们知道文本中出现的每个模式都必须是文本中某个可能后缀的前缀。通过构建所有后缀的 Trie 树,我们可以在线性时间内找到任何子字符串。每个后缀都以字符串终止符号结尾。如果从每个节点存在任何路径,则它向前移动,否则返回未找到该模式。对于此算法,时间复杂度为 O(m+k),其中 m 是字符串的长度,k 是模式出现的频率... 阅读更多
884 次查看
从给定的字符串中,我们可以获得所有可能的后缀。在按字典顺序对后缀进行排序后,我们可以得到后缀数组。后缀数组也可以使用后缀树来形成。通过使用后缀树的 DFS 遍历,我们可以得到后缀数组。后缀数组有助于在线性时间内查找后缀。我们还可以使用类似二分查找的过程,使用后缀数组查找子字符串。时间复杂度为 O(m log n)输入和输出输入:主字符串:“BANANA”,模式:“NAN”输出:模式在位置 2 处找到算法fillSuffixArray (text, suffArray)输入:主字符串输出:后缀数组开始 n := text Length ... 阅读更多
2K+ 次查看
Rabin-Karp 是另一种模式搜索算法,用于以更有效的方式查找模式。它也通过逐个移动窗口来检查模式,但在并非所有情况下都检查所有字符,它会找到哈希值。当哈希值匹配时,它才会尝试检查每个字符。此过程使算法更高效。时间复杂度为 O(m+n),但对于最坏情况,它是 O(mn)。输入和输出输入:主字符串:“ABAAABCDBBABCDDEBCABC”,模式“ABC”输出:模式在位置 4 处找到 模式在位置 10 处找到 模式在位置 18 处找到算法rabinKarpSearch(text, pattern, prime)输入 - 主... 阅读更多
6K+ 次查看
朴素模式搜索是在其他模式搜索算法中最简单的方法。它检查主字符串的所有字符与模式是否匹配。此算法适用于较小的文本。它不需要任何预处理阶段。我们可以通过检查一次字符串来找到子字符串。它也不占用额外的空间来执行操作。朴素模式搜索方法的时间复杂度为 O(m*n)。m 是模式的大小,n 是主字符串的大小。输入和输出输入:主字符串:“ABAAABCDBBABCDDEBCABC”,模式:“ABC”输出:模式在位置 4 处找到 模式在... 阅读更多
718 次查看
要从字符串中找到最长的回文子字符串,我们可以使用 Manacher 算法。通过选择每个字符,我们将尝试使用左右指针查找是否存在任何回文。还有一个数组用于存储信息,从这些信息中我们可以很容易地找到回文有多长。对于每个字符,数组将存储信息。遍历整个字符串后,我们可以从创建的数组中找到最长的回文子序列。此算法的时间复杂度为 O(n)。输入和输出输入:字符串:“levelup”输出:最长回文是:level算法longestPalindrome(text)输入 - 要查找最长回文的文本输出 - ... 阅读更多
689 次查看
Kasai 算法用于从后缀数组中获取最长公共前缀 (LCP) 数组。首先找到后缀数组。之后,Kasai 算法获取后缀数组列表以查找 LCP。对于 LCP 数组,它需要 O(m log n),其中 m 是模式长度,n 是文本的长度。Kasai 算法需要 O(n) 来在主字符串中搜索模式。输入和输出输入:主字符串:“banana”输出:后缀数组:5 3 1 0 4 2 公共前缀数组:1 3 0 0 2 0算法buildSuffixArray(text)输入:主字符串输出:构建的后缀数组... 阅读更多
1K+ 次查看
通过构建有限自动机,我们可以简单地在文本中执行模式搜索。首先,我们必须填充一个二维数组以创建有限自动机的转换表。创建表后,搜索过程很简单。从自动机的第一个状态开始,当我们到达最终状态时,表示在字符串中找到了模式。对于有限自动机的构建,时间复杂度为 O(M*K),M 是模式长度,K 是不同字符的数量。主模式搜索的复杂度为 O(n)。输入和输出输入:主字符串:... 阅读更多
坏字符启发式方法是 Boyer Moore 算法的一种方法。另一种方法是好后缀启发式。在这种方法中,我们将尝试找到一个坏字符,即主字符串中的一个字符,它与模式不匹配。当发生不匹配时,我们将移动整个模式,直到不匹配变成匹配,否则,模式将移过坏字符。此处,时间复杂度对于最佳情况为 O(m/n),对于最坏情况为 O(mn),其中 n 是文本的长度,m 是模式的长度。输入和... 阅读更多
424 次查看
字谜基本上是给定字符串或模式的所有排列。这种模式搜索算法略有不同。在这种情况下,不仅搜索确切的模式,还搜索文本中给定模式的所有可能排列。为了解决这个问题,我们将整个文本划分为几个与模式长度相同的窗口。然后计算每个模式字符是否被找到并存储在数组中。对于每个窗口,我们还尝试找到计数数组,然后检查它们是否匹配。字谜模式搜索算法的时间复杂度为 O(n)。输入... 阅读更多
此算法有助于查找所有给定关键字集的所有出现。它是一种字典匹配算法。它使用一棵树结构使用所有关键字。构建树后,它会尝试将树转换为自动机,以便在线性时间内进行搜索。Aho-Corasick 算法有三个不同的阶段。这些是 Go-to、Failure 和 Output。在 Go-to 阶段,它使用所有关键字构建树。在下一阶段或 Failure 阶段,它会尝试找到向后转换以获取某些关键字的适当后缀。在... 阅读更多