BF算法(Brute-Force,又称古典的、经典的、朴素的穷举的)
这个算法简单的利用了穷举法的思路。
如下S为主串,T为子串。思路如下:先用T中的第一位a与S中的第一位比较,如果相同则比较第二位。用T中的b与S中的第二位进行比较。若相同,则依此类推。
若不同,则用T中的第一位a与S中的第二位进行比较(不完全相同),则又往后。
这就是大概的思路啦!
相信大概用什么方法来实现呢?
那就是用双指针。
注意:当匹配失败的时候,j从头开始,而i需要回到开始位置的下一位置(就是回溯),i=i-j+2,怎样理解这个式子呢?j-1是i与j一起前进的数,要想回到原位就需要用i=i-(j-1),而我们想要回到原位的下一个位置,则为i=i-(j-1)+1;就为i=i-j+2;
代码如下图所示:
查找的位置不一定是从头开始,也可以从中间开始查找
那么时间复杂度为多少呢?
若n为主串长度,m为子串长度,那么
最好为o(m)
最差为o(m*n)