[数据结构与算法] 字符串匹配 - 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; } }