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;
}