BF暴力匹配算法

有同学问到我字串匹配的问题,一时间竟然想不起来BF算法了,现在回顾一下,基本思想:现有模式串S 和待匹配串T 

首先T 从S 的开头开始匹配,如果相应位置匹配成功,则二者各向前走一位,如果失配,T串回溯到开头,S 串回溯到上

次匹配成功的的开头的下一个位置。


#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    char t[10100],s[10100];
    int i,j;
    while(scanf("%s%s",s,t)!=EOF)
	{
		i=0;j=0;
		int lent=strlen(t),lens=strlen(s);
		while(i<lens&&j<lent)
		{
			if(s[i]==t[j])
			{
				++i;++j;
			}
			else
			{
				i=i-j+1;//模式串回溯到上次开始匹配的下一个地方
				j=0; //匹配串回溯到0
			}
		}
		if(j==lent)
			puts("YES");//可以找到字串
		else
		    puts("NO");//找不到字串
	}
	return 0;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值