[数据结构与算法] 字符串匹配 - BF算法

BF(Brute Force)算法

又称暴力匹配算法,是一种朴素的模式匹配算法

给定主串 S : Bilibili 和子串 T :Bilididi

步骤:

  1. 主串 S 第一位开始与子串 T 第一位匹配,B 与 l 不匹配, 匹配失败

     

  2. 主串 S 第二位开始与子串 T 第一位匹配, i 与 l 不匹配,匹配失败

       

 

  3. 主串 S 第三位开始与子串 T 第一位匹配,S 与 T 四个字母全部匹配,匹配成功

  总的来说就是,从主串的第一个字母开始与子串匹配,匹配不成功,子串就向后移动一个单位,然后与主串的第二个字母开始匹配,以此类推直到全部匹配成功

  当匹配不成的时候,要将 i 进行 回溯,  i = i - j + 1 将 i 回溯到下一个位置

    

 

 

#include <string>
using namespace std;

/* 返回子串T在主串S中第pos个字符后的位置,若不存在则返回0 */
/* 确定子串T 在 主串S 第一次出现的位置*/
/* T为非空, 1<= pos <= S.length() */
/* pos: 比较的起始位置*/
int StrCompare_BF(string S, string T, int pos = 0)
{
    int i = pos;    //i用于主串S的起始位置
    int j = 0;        //子串的起始位置
    int lenS = S.length();
    int lenT = T.length();
    while (i < lenS&&j < lenT)
    {
        if (S[i] == T[j])
        {
            ++i;
            ++j;
        }
        else
        {
            //当字符不匹配的时候,i回溯,移动到下一位
            i = i - j + 1;    
            j = 0;
        }
    }
    if (j >= lenT)
    {
        return i - j;
    }
    else
    {
        return -1;
    }
}

 

posted @ 2019-08-16 16:23  47的菠萝~  阅读(497)  评论(0编辑  收藏  举报