串的匹配模式算法:BF和KMP算法(慢慢学,慢慢更新)

串的匹配模式算法:BF和KMP

      • 1. BF算法:
      • 2. KMP算法

1. BF算法:


Brute-Force算法的基本思想是:

1)从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较。

2)依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功。

Brute-Force算法的实现
串的匹配模式算法:BF和KMP算法(慢慢学,慢慢更新)_第1张图片

//宏定义    
#define TRUE   1    
#define FALSE   0    
#define OK    1    
#define ERROR   0  
 
#define  MAXSTRLEN 100
 
typedef char	SString[MAXSTRLEN + 1];
//返回T在S的第pos之后的位置
int BFindex(SString S, SString T, int pos)	//T为子串,S为主串
{
	if (pos <1 ||  pos > S[0] ) exit(ERROR);	//s[0]为串长,大于串长或者小于1
	int i = pos, j =1;
	while (i<= S[0] && j <= T[0])		//两串非空
	{
		if (S[i] == T[j]){			//两串字符相等,都向下移动
			++i; ++j;
		} 
		else {					//从下一位重新开始匹配
			i = i- j+ 2;			//主串从i-j+2开始
			j = 1;					//子串从头开始
		}
	}
	if(j > T[0]) return i - T[0];	//j>串长,说明比较完毕,i-串长=出现的位置
	return ERROR;
}
 
void main(){
	SString S = {
    13,'a','b','a','b','c','a','b','c','a','c','b','a','b'};
	SString T = {
    5,'a','b','c','a','c'};
	int pos;
	pos = BFindex( S,  T, 1);
	cout<<"Pos:"<<pos;
}

2. KMP算法


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