我最近研究了字符串匹配,并受到启发,想到了类似的问题。让 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 模式?以前是否已经解决了这个问题?
提前致谢
答案 0 :(得分:1)
我认为您仍然可以应用线性时间KMP algorithm来解决它。只需将m-1个字符t [0],t 1,...,t [m-2]添加到文本t的末尾。当然,如果在文本t结束后仍然在表格中留下候选子字符串,则只需要这样做。
如果测试字符串是BCDEA
AXYZBCDE将成为AXYZBCDEAXYZ
答案 1 :(得分:0)
只需加倍并对p进行普通查找
所以你会在CDEFABCDEFAB中查找ABCD并获得正确的i。这可以在线性时间内完成。