【发布时间】:2014-03-17 07:25:20
【问题描述】:
我需要编写一个最长的两个模式前缀/后缀匹配的算法,其时间复杂度为 O(n+m1+m2),其中 n 是字符串的长度,m1,m2 分别是模式 1 和模式 2 的长度.
示例:如果 String 是“OBANTAO”,Pattern1 是“BANANA”,Patten2 是“SIESTA”,则答案是 String 的子字符串“BANTA”,由 BANANA 的前缀 BAN 和 SIESTA 的后缀 TA 组成。
来自 Google 的结果是:“Rabin-karp 字符串搜索算法”、“Knuth-morris-pratt 算法”和“Boyer-moore 字符串搜索算法”。
以上三种算法我都能理解,但问题是,它们都是基于“单一模式前缀/后缀匹配”的。我无法将它们扩展为两个模式前缀/后缀匹配。
一个示例算法或搜索它的链接将对我开发程序有很大帮助。
【问题讨论】:
-
它总是一个子字符串吗?还是子序列也可以?它总是前缀和后缀吗?例如在字符串
lananaest- ananaest 是一个很好的解决方案,因为 anana 是香蕉的子字符串,而 est 是午睡的子字符串? -
这会给你带来什么实际的信息?
-
你想匹配的模式总是
(prefix of Pattern 1) + (suffix of pattern 2)吗?所以你真正想要的是由p1 + s2组成的最长子串?您确实需要更好地说明您的问题。 -
@amit 对不起,不是那样,匹配的字符串应该始终是香蕉的剪辑前缀和午睡的剪辑后缀......即(B/BA/BAN/BANA/BANAN) 来自 BANANA 和 (A/TA/STA/ESTA/IESTA) 来自 SIESTA
-
欢迎来到 StackOverflow!请在回答评论时更新您的问题(因为这意味着您的问题没有提供足够的信息),以便每个人都更清楚,并在必要时尝试使用代码标记使您的文本更具可读性。
标签: regex string algorithm suffix-tree prefix-tree