串的模式匹配算法

本文介绍了模式匹配的概念和两种常见算法:Brute_Force算法和KMP算法。Brute_Force算法通过逐字符对比实现匹配,效率较低;KMP算法通过避免不必要的回溯提高效率,其核心在于利用模式串的next数组来确定匹配失败后的起始对比位置。文章分析了两种算法的工作原理,并提供了KMP算法中next数组的计算思路。
摘要由CSDN通过智能技术生成

模式匹配是在主串(也称目标串)中,从给定的起始位start开始查找是否存在我们需要的子串(也称模式串),如果查找成功返回模式串的第一个字符在主串中的位置,当模式匹配失败,返回-1。常用的模式匹配算法有Brute_Force算法和KMP算法。

Brute_Force算法,从force就可以看出是一种蛮力解决的方法。其模式匹配思想是:(1)将模式串的第一个字符与主串的第一个字符对齐放置,比较第一个字符是否相等;(2)若第一个字符相等,再比较第二个位置相对应的字符,依次对比。(3)若第一个字符不等或其他对应位在比对过程中发现不相等,就把模式串向后移动一位,即模式串的第一位和主串的第二位对齐,再次从模式串的第一个字符开始和主串对比,依次类推下去。(4)如果模式串中每个字符依次和主串中的一个连续字符序列相等,则匹配成功;(5)若主串中所有的字符都已经比对完,但不存在连续字符序列和模式串相等,则匹配失败。

Brute_Force算法的函数设计:

public int indexOf_BF_Count(MyString subStr,int start){
	//统计Brute-Force算法查找子串的比较次数并返回
		int i = start,j = 0,v;
		int count = 0;//计数看对比了多少次
		while(i<this.length() && j<subStr.length()){
			if(this.charAt(i) == subStr.charAt(j)){
				i++;
				j++;
			}
			else{
				i = i-j+1;//模式串后移一位
				j = 0;
			}
			count++;
		}
		if(j==subStr.length()) v = i-subStr.length();//容易出错的地方若匹配成功,跳出循环后的j已经加了1
		else v = -1;
		
		System.out.println("Brute-Force结果:"+v);
		return count;
	}

Brute_Force算法的最坏时间复杂度为O(n*m),n为主串长度,m为模式串长度。最坏情况:模式串的m个字符前m-1个字符都相等,唯独最后一个匹配失败,所以,要比较n-m-1次,每次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值