字符串匹配问题:给定两个字符串S(主串)和T(模式串),假设n=strlen(S) > strlen(T)=m,判断主串S中是否包含模式T,且返回T在S中所在的起始位置。这里为简单起见,若S包含T,则只返回第一个T所在的位置。
一般的蛮力法如下:
蛮力法在遇到不匹配时,j每次都要回到T的起点,从新开始匹配,这样来看效率就比较低,蛮力法的时间复杂度是O(n*m)。
1、理论
思想:尽量利用
已经部分匹配的结果信息,尽量让
i 不回溯,加快模式串T的滑动速度。
先举个启发性的例子,然后引出理论。例子:
结论:从例子中可以看出,每次匹配失败,然后回溯再次从新匹配时(第2、4、5趟),判断当前的S[i]和T[j]是否相等可通过上一趟S