关于匹配数组(字符串)一些所想BF、KMP

匹配(相等,或者其他关系)两个数组,其实都是用指针(i,j或者纯粹的指针),指向下标为0的两个数组

如果,匹配成功,则两个数组都同时移动++,值得注意的是,不相等的情况下

如果,匹配不相等,按照暴力解法,BF暴力算法来说(字符串,但似乎用到数组也没什么问题)。在这里为了方便,给大数组称之为A数组,小数组称之为B数组

匹配不相等时,此时很容易联想到,小数组B数组,的指针肯定要从头开始,也就是下标为0的位置开始,而大数组,则是从上一次位置的下一个开始。也就是如果A数组上次是从0开始的,那么这一次要从0+1开始。

这里所说的小数组从0开始,是BF暴力算法的关键,后续所说的KMP,则是对这个进行改善,也就是不跳到0,跳到某个下标开始,这样子时间复杂度会大大减少(一般来说)

#include <iostream>

using namespace std;

int main() {
	string s1 = "abcabdd";
	string s2 = "abd";
	int len_s1 = s1.length();
	int len_s2 = s2.length();
	int j; //这里是为了方便后续检测,所以初始化在这里
	//注意这里是i<=len,有=
	for(int i=0;i<=len_s1-len_s2;i++) {
		for(j=0;j<len_s2;j++) {
			if(s1[j+i]!=s2[j]) {
				break;
			}
		}
		if(j==len_s2) {
			cout << i; 
		}
 	}
	
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值