BF算法是字符匹配的一种算法,也称暴力匹配算法
算法思想:
从主串s1的pos位置出发,与子串s2第一位进行匹配
若相等,接着匹配后一位字符
若不相等,则返回到s1前一次匹配位置的后一位,接着与s2的起始位进行匹配
直到与s2全部匹配成功,则返回在s1中开始完全匹配的下标
简单说这个算法的思想就是匹配失败,就重新从上一次匹配位置的下一位开始匹配
难理解之处:
①i = i - j + 2,这一步是若匹配失败,从上一次匹配位置的下一位开始
i - j是去掉前面匹配过的次数,+ 2是到达下一个匹配位置
②i - s2.length(),它返回的是第一次匹配成功时在s1中的下标
也就是去掉与s2匹配的个数,就是下标
代码:
#include <iostream> #include <string> using namespace std; //BF算法(暴力匹配算法) int BF(string s1, string s2, int pos) { int i = pos - 1; int j = 0; while(i < s1.length() && j < s2.length()) //若i和j都大于字符串的长度就结束循环 { if(s1[i] == s2[j]) { i++; j++; } else { i = i - j + 2; j = 1; } } if(j >= s2.length()) return i - s2.length(); //返回的是第一次匹配到的字符的下标 return 0; } int main() { string s1 = "abcdabcdefg"; string s2 = "abcde"; int pos; cin >> pos; //输入s1开始匹配的位置 cout << BF(s1, s2, pos); return 0; }
运行程序: