KMP模式匹配算法总结

KMP算法主要是对朴素的模式匹配算法的改进,假设有String A和String B,i为A的首个字母的下标,j为B的首个字母的下标,即i=0,j=0,现要在A中匹配B,若用朴素的模式匹配算法,则i需要不断的回溯,如A=acbxacbd,B=abcd,当i=3,j=3时,发现字符不相等,如果使用的是朴素的模式匹配算法,则需要将i回溯为1,即i=i-j+1,而j=0。

若用的是KMP模式匹配算法,i不需要回溯,只有j根据字符串B的具体情况回溯到相应位置。

KMP解决了朴素匹配模式算法中的i和j的回溯问题,提高了字符串匹配的效率


KMP算法主要分为两部份

第一部分为方法getNext(),其数组的元素为在对应字符不相等时j需要回溯到字符串B的相应位置

public void getNext(String str,int[] next){
		int i=0,j=-1;
		next[0] = -1;
		while(i


第二部分为方法indexKMP(),相对应与朴素匹配算法,在判断条件中加了j==-1和i、j回溯方法的不同

public void indexKMP(String A,String B,int[] next){
		int i=0,j=0;
		while(i=B.length())
			System.out.println("查找成功");
		else
			System.out.println("该字符串不存在");
		
	}



总结

相对于朴素的模式匹配算法,KMP主要解决了就算上一轮的匹配不成功,也能为下一轮的匹配提供信息,使得i不用回溯,而j回溯到最合适的位置。

朴素的模式匹配算法的时间复杂度为((n-m+1)*m),而KMP提高为n+m

注:m为A的长度,n为B的长度








你可能感兴趣的:(数据结构,算法)