Sunday算法(字符串匹配-)

Sunday算法(字符串匹配-)
In abcde cde
Out The index is: 2
#include<bits/stdc++.h>
using namespace std;
void SundayMatch(const char *src, const char *patt){//传入源串(长)与模板串(短)
	int slen = strlen(src);//得源串长
	int plen = strlen(patt);//得模板串长
	int shift[256];//位移标记
	for(int i=0;i<256;++i)shift[i]=plen+1;//初始化全部都是模板串长+1,对于一些模板串中没有的字符就是偏移整个plen
	for(int i=0;i<plen;++i)shift[(unsigned char)(patt[i])]=plen-i;//当前字符串距离最右端的距离
	//遍历模板串的每一位,记录他到串末的步距,由于是左扫到右,可以保证每个字符是后出现的那个到最右端距离
	int limit=slen-plen;//最后至少还剩下patt长度的未匹配字符段
 	for(int i=0;i<=limit;i+=shift[src[i+plen]]){//i是母串当前扫到的左界
		int j=0;
		while(j<plen){//然后以I为左界逐位判
			if(src[i+j]!=patt[j])break;//如果不等就跳出,每次跳出后,左界i各移shift[src[i+plen]],即母串中i+plen的那个字符到模板串末步长
			j++;//一直相同就不断加
		}
		if (j==plen)cout<<"The index is: " << i << endl;//万一匹配到相等退出表示找到,就读出此时左界即可
	}
}
int main(){
    char s[1003],p[1003];
    cin>>s>>p;
    SundayMatch(s,p);
    return 0;
}
/*
补充:基础是KMP,比KMP快的是BM(BM比KMP快3~5倍,还有文本处理软件中的查找(CTRL+F)和替换(CTRL+H)命令用的就是BM算法),比BM快的是Sunday,为此篇文章
*/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值