数据结构-Brute-Force模式匹配算法

模式匹配:子串在主串中的定位称为模式匹配或串匹配(字符串匹配) 。模式匹配成功是指在主串S中能够找到模式串P,否则,称模式串P在主串S中不存在。

Brute-Force模式匹配算法

该算法的思想是:

分别利用计数指针i和j指向主串S和模式串P中当前正待比较的字符位置,从主串的第pos个字符起和模式串的第一个字符开始比较,如果相同,则继续比较后续字符,否则从主串的下一个字符起再重新与模式串进行比较,以此类推。若主串中存在字串与模式串完全匹配,则匹配成功,反之匹配失败。

设S为目标串,P为模式串,则在匹配时:

该算法的优点是简单,便于理解,但是时间复杂度较高。因为每一次匹配失败主串指针要回到开始字符的下一位置,模式串的指针都要回到开头。通常情况下,实际运行过程中,该算法的执行时间近似于O(n+m) 。 该算法的最坏情况下的时间复杂度为O(n*m) ,其中n 、m分别是主串和模式串的长度。

算法实现:

#include<iostream>
using namespace std;
#define MaxStrLen 255//串长不大于255都可以
typedef unsigned char SString[MaxStrLen + 1];//0号单元存放串的长度

//返回子串P在主串S中第pos个字符之后的位置。若不存在,函数返回0。其中,P非空,1≤pos≤StrLength(S)
int Index(SString S, SString P, int pos)
{
	int i = pos;   //S指针位置
	int j = 1;		//P指针位置
	while (i <= S[0] && j <= P[0])
	{
		if (S[i] == P[j])
		{  // 继续比较后继字符
			i++;
			j++;
		}
		else
		{  // 指针后退重新开始匹配
			i = i - j + 2;//注意i的值
			j = 1;
		}
	}
	if (j > P[0])
	{
		return i - P[0];		//找到了
	}
	else
	{
		return 0;			//没找到
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值