BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,

若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符

依次比较下去,直到得出最后的匹配结果

如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;

如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0

思想:先从第一个字符开始匹配,如果p[j]==s[i],那么继续向下比较,一旦不相等,即回溯到目标串的下一个字符,重复工作。

成功条件:当循环结束时,判断j的值与模式串p的长度是否相等,如果相等,说明匹配成功到了模式p的最后一个字符。

串的BF模式匹配算法_字符匹配


串的BF模式匹配算法_字符匹配_02


串的BF模式匹配算法_字符匹配_03

//a主串b子串
static int Match(string a,string b)
{
if (a.Length<b.Length)
{
return -1;
}

int i = 0; //a 的开始比较索引位置
int j = 0;//b 的开始比较索引位置
while (i<a.Length&&j<b.Length)
{
if (a[i].Equals(b[j]))
{
i++;
j++;
}
else
{
i = i - (j - 0) + 1; //回溯到开始比较的位置+1
j = 0;
}
}

if (j==b.Length)
{
return i - b.Length;
}
else
{
return -1;
}
}
static void Main(string[] args)
{

string a = "ababacf";
string b = "cf";
Console.WriteLine(Match(a,b));
Console.ReadKey();
}