串的模式匹配算法:简单匹配算法、KMP模式匹配
简单匹配算法
时间复杂度:O(n*m)
int Index(Sstring S, int pos, Sstring T)
{
int i=pos, j=1;
while(i<=S.len && j<=T.len)
{
if(S.ch[i]==T.ch[j])
{
i++;
j++;
}
else
{
i=i-j+2;
j=1;
}
}
if(j>=T.len)
return i-T.len;
else
return 0;
}
KMP模式匹配
KMP算法
时间复杂度:O(n+m)
int Index_KMP(SString a, int pos, SString T)
{
int i=pos, j=1;
while(i<=S.len && j<=T.len)
{
if(j==0 || S.ch[i]==T.ch[j])
{
i++;
j++;
}
else
j=next[j];
}
if(j>T.len)
return i-T.len;
else
return 0;
}
模式串的next值计算实现
next函数值的算法:
void Get_Next(SString T, int next[])
{
int j=1, k=0;
next[1]=0;
while(j<T.len)
{
if(k==0 || T.ch[j]==T.ch[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}