zoukankan      html  css  js  c++  java
  • BF算法(蛮力匹配)

    输入主串a,模式b

    b在a中的位置

    1.在串a和串b中设置比较的下标i=0,j=0;

    2.重复下述操作,直到a或b的所有字符均比较完毕:

      2.1如果a[i]等于b[i],继续比较a和b的下一对字符;

      2.2负责,下标i和j分别回溯,开始下一趟匹配;

    3.如果b中所有字符均比较完,则匹配成功,返回本趟匹配的起始位置;负责匹配失败,返回0;

    #include<iostream>
    #define N 100000
    using namespace std;
    char a[N],b[N];
    
    int BF(char a[],char b[])//BF算法 
    {
        int i = 0,j = 0;//i,j变量分别表示在主串和模式串的位置 
        int start = 0;//start记录主串回溯的位置 
        while(a[i] != '' && b[j] != '')
        {
            if(a[i] == b[j])
            {
                i++;
                j++;
            }
            else
            {
                start++;
                i = start;
                j = 0;
            }
        }
        if(b[j] == '')//如果是模式串所有匹配完成,即匹配成功,返回位置 
            return start + 1;
        else//否则匹配失败 
            return 0;
    }
    
    int main()
    {
        int t;
        cin >> t;//t个测试样例 
        while(t--)
        {
            int flag;//模式匹配成功的位置 
            cin >> a >> b;//读入字符串 
            flag = BF(a,b);
            cout << flag << endl;
        }
        return 0;
    }
  • 相关阅读:
    C# 反射修改私有静态成员变量
    symfony2 controller
    symfony2 路由工作原理及配置
    symfony2 安装并创建第一个页面
    git操作命令
    Node异步I/O、事件驱动与高性能服务器
    nodejs get/request
    nodejs events模块
    nodejs 小爬虫
    nodejs API
  • 原文地址:https://www.cnblogs.com/biaobiao88/p/11669826.html
Copyright © 2011-2022 走看看