BF算法(模式匹配)

BF算法 (Brute-Force算法)

一种简单的模式匹配算法,目的是寻找模式串p是否在目标串s中有出现。

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

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

返回值:返回模式串在目标串中出现的位置。

具体实现如下:

#include <iostream>
#include <string>
using namespace std;
int index(string s,string p)
{
    int i=0,j,k;
    while (i<s.length())
    {
        for (j=i,k=0;j<s.length() && k<p.length()
            && s[j]==p[k];j++,k++)
            ;
        if (k==p.length())
        {
            return i;
        }
        i++;
    }
    return 0;
}
int index1(string s,string p)
{
    int i=0,j=0;
    while (i<s.length() && j<p.length())  //j一旦超过模式长度,代表匹配成功,跳出循环
    {
        if (s[i]==p[j])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+1;  //回溯
            j=0;
        }
    }
    if (j>=p.length())
    {
        return i-p.length();  //返回匹配成功的位置
    }
    else
        return 0;
}

int main()
{
    string s,p;
    cin>>s>>p;
    cout<<"BF1算法匹配结果为:"<<index(s,p)<<endl;
    cout<<"BF2算法匹配结果为:"<<index1(s,p)<<endl;
    return 0;
}

算法不考虑时间复杂度和空间复杂度,这是最简单也是我们很容易想到的一种算法思想。

初出茅庐,请多照顾。

 

转载于:https://www.cnblogs.com/cnyulei/p/7798009.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值