串的模式匹配算法
朴素匹配
这里采用C语言编写,使用串的定长存储,定义如下:
// 顺序串的最大串长
#define MAX_STR_LEN 255
// 0号单元存放串的长度
typedef unsigned char SString[MAX_STR_LEN + 1];
基本思想:从主串的第pos个字符开始,和模式串的第一个字符依次比较,若相同,则往后逐个比较模式串后续字符。若不等,则从珠串的下一个字符开始从头和模式串的字符相匹配。时间复杂度:最好情况下是O(n+m);最坏时间复杂度为O(n*m),在匹配01串的时候往往效率会比较低。
算法实现如下:
int Index(SString S,SString T,int post=1) {
int i =post;
int j =1;
while (i<=S[0]&&j<=T[0]){
if (S[i]==T[j]){
i++;
j++;
} else{
i = i-j+2;
j=1;
}
}
if (j>T[0]) return i-T[0]+1;
return 0;
}