java朴素(BF)模式匹配算法解析,及其代码实现

BF(朴素)匹配算法
概念:
BF(朴素)是简单的模式匹配算法,就是通过主串str匹配是否存在子串sub
举例:
假设我们从下面的主串String str = "abcababcabc"中,找到String sub = "abcabc"这个子串的位置,我们通常需要以下步骤:
1、分别定义i和j为主串和子串所对应的下标;
主串str从0号下标开始,str与sub 4号下标以前,字母都匹配成功,但str 5号下标字母是a而sub的是c,所以第一位匹配失败,如下所示:
java朴素(BF)模式匹配算法解析,及其代码实现_第1张图片
2、此时i回退到1号下标,str从第2个开始,j回退到0号下标,sub从头开始重新匹配,str首字母是b,sub首字母是a,匹配失败,如下:
java朴素(BF)模式匹配算法解析,及其代码实现_第2张图片
3、此时i回退到2号下标,str从第3个开始,j回退到0号下标,sub从头开始重新匹配,str首字母是c,sub首字母是a,匹配失败,如下:
java朴素(BF)模式匹配算法解析,及其代码实现_第3张图片
4、此时i回退到3号下标,str从第4个开始,j回退到0号下标,sub从头开始重新匹配,str首字母是a,sub首字母是a,继续i+1,j+1,str第5个为b,sub第2个为b,继续各自+1操作,str第6个为a,sub第3个为c,匹配失败,如下:
java朴素(BF)模式匹配算法解析,及其代码实现_第4张图片
5、此时i回退到4号下标,str从第5个开始,j回退到0号下标,sub从头开始重新匹配,str首字母是b,sub首字母是a,匹配失败,如下:
java朴素(BF)模式匹配算法解析,及其代码实现_第5张图片
6、此时i回退到5号下标,str从第6个开始,j回退到0号下标,sub从头开始重新匹配,str首字母是a,sub首字母是a,继续第4步操作,发现从5号下标以后主串和子串匹配,找到返回下标,如下:
java朴素(BF)模式匹配算法解析,及其代码实现_第6张图片
简单地说,就是i每次回退,是主串的每一个字符作为子串开头,与要匹配的子串进行匹配。
代码实现:

 /*
    BF算法
    i回退,j回退
    主串m个数据,子串n个数据,时间复杂度m*n
 */
public class TestDemo {
    public static int BF(char[]str,char[]sub){
        int i=0,j=0;
        while (j

打印结果:

请输出主串str:abcababcabc
请输出子串sub:abcabc
若找到,请输出对应的主串下标:5

通过开始的分析,以及打印结果,我们都可以知道在已知的这两个字符串中,子串在主串存在,且从主串的5号下标开始两个完全匹配。

你可能感兴趣的:(java朴素(BF)模式匹配算法解析,及其代码实现)