用于字符串匹配的扩展版本的算法

时间:2013-10-17 09:20:28

标签: algorithm string-matching

我最近研究了字符串匹配,并受到启发,想到了类似的问题。让 p m 字符串, t n 字符的文本。现在问题是通过以下方式找出 t 是否出现在 t 中:在[0,范围内存在 i > n -1]这样:

p [ j ] = t [ i + j ] j = 0,1,..., m - 1,

其中 i + j n 模数计算。例如,在正常的字符串匹配中,ABCD不会出现在CDEFAB中,但是您可以看到在上面定义的问题中,ABCD将出现在CDEFAB中,在这种情况下 i = 4。

是否有任何线性时间算法来确定 t 中是否出现 p 模式?以前是否已经解决了这个问题?

提前致谢

2 个答案:

答案 0 :(得分:1)

我认为您仍然可以应用线性时间KMP algorithm来解决它。只需将m-1个字符t [0],t 1,...,t [m-2]添加到文本t的末尾。当然,如果在文本t结束后仍然在表格中留下候选子字符串,则只需要这样做。

如果测试字符串是BCDEA
AXYZBCDE将成为AXYZBCDEAXYZ

答案 1 :(得分:0)

只需加倍并对p进行普通查找

所以你会在CDEFABCDEFAB中查找ABCD并获得正确的i。这可以在线性时间内完成。