有同学问到我字串匹配的问题,一时间竟然想不起来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;
}