BF算法
BF算法
BF算法又称朴素的模式匹配算法,属于串匹配中的暴力法
即在S的所有字符中逐个匹配P的每个字符。
局限性
如果情况最坏的时候,假设在一个长度为n的文本串中查找一个长度为m的模式串,则需要匹配n*m次。复杂度将会由O(m+n)退化到O(mn)
核心代码
void BF(string s, string p) {
int i = 0, j = 0, count = 0,sum=0,ans=0;//i记录文本串位置,j记录模式串位置,count统计该趟匹配次数,sum统计总判断次数,ans统计匹配轮数
while (i < s.size()) {
if (s.at(i) == p.at(j)) {//匹配成功,下一位
i++;
j++;
count++;
sum++;
}
else {//匹配失败 j回溯,i回滚起始的下一位
i=i-count+1;
j = 0;
count = 0;
sum++;
ans++;
}
if (count == p.size()) {
ans++;
cout << "模式匹配成功,共走了" << ans << "轮" << endl;
cout << "判断了" << sum << "次" << endl;
return;
}
}
cout << "匹配失败" << endl;
cout << "判断了" << sum << "次" << endl;
}