这是一种字符串匹配算法,复杂度为O(M),大致过程如下:
例如要在字符串
fdfgfgkll 中匹配出子串fgfg,
首先要对fgfg分析出它的prefix table,大致过程如下。
- 列出fgfg的子串:
f
fg
fgf
fgfg
- 找出各列的最大公共前后缀:
0 f
0 fg
1 fgf
2 fgfg
可以获得frefix table:0,0,1,2,将最后一个去掉,第一个补-1,得-1,0,0,1
f g f g
-1 0 0 1
f g f g与fdfgfgkll匹配:
f d f g f g k l l
v x
f g f g
-1 0 0 1
第二个元素g匹配错误,那么取g对应的prefix的值,与原字符串继续匹配:
f d f g f g k l l
x
f g f g
-1 0 0 1
还是匹配不上,继续取对应的prefix的值,与原字符串继续匹配:
f d f g f g k l l
v v v v
f g f g
-1 0 0 1