zoukankan      html  css  js  c++  java
  • 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;
    }

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

    初出茅庐,请多照顾。

  • 相关阅读:
    创建你的 /proc 文件
    在 /proc 里实现文件
    使用 /proc 文件系统
    printk函数速率限制
    printk函数打开和关闭消息
    printk 函数消息是如何记录的
    mysql存储程序
    Javascript 笔记与总结(1-1)作用域
    Java实现 LeetCode 142 环形链表 II(二)
    Java实现 LeetCode 142 环形链表 II(二)
  • 原文地址:https://www.cnblogs.com/cnyulei/p/7798009.html
Copyright © 2011-2022 走看看