字符串匹配(暴力匹配)

14 篇文章 2 订阅

题目描述:

       给定一个目标串str和模式串ptr,要求寻找ptr第一次在str出现的位置,并返回其下标,匹配不到则返回-1。

暴力匹配(Brute force

       暴力匹配的思路很简单,开始时用模式串ptr从匹配串str的第一个字符开始向后匹配,当出现不同字符时,从匹配串str的下一个字符开始重新匹配,即原搜索位置+1开始重新匹配。

       空间复杂度:O(1);

       时间复杂度:O(N*M),N是目标串的长度,M是模式串的长度;

       代码如下:

int strStr(string haystack, string needle) {
	//异常处理
	if (haystack.length() == 0)
	{
		if (needle.length() == 0)
		{
			return 0;
		}
		else
		{
			return -1;
		}
	}
	else if (haystack.length() < needle.length())
	{
		return -1;
	}

	int p1; //p1是目标串的当前匹配位置
	int p2; //p2是模式串的当前匹配位置
	int i = needle.length();//将i置为目标串中的匹配串最后一个字符对应的位置
	for (p1 = 0; i <= haystack.length(); ++i)
	{
		int p1_old = p1;//记录这一轮匹配的初始位置
		p2 = 0;//每一次都从模式串的第一位开始
		while (p1 < haystack.length() && p2 < needle.length()  && haystack[p1] == needle[p2])
		{
			++p1;
			++p2;
		}
		//匹配成功则返回下标
		if (p2 >= needle.length())
		{
			return p1_old;
		}

		p1 = p1_old + 1; //从原搜索位置+1继续搜索
	}
	return -1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值