int KMP_Index(){
int i = 0, j = 0,ans=0;//ans=-1;
getNext();
while(i < slen){
if(j == -1 || S[i] == T[j]){
i++; j++;
}else
j = nextt[j];
if(j == tlen){
//ans++,j=0;//语句1
//ans++,j=nextt[j];//语句2
//ans=i-j+1;break;//语句3
}
}
return ans;
}
对于这段代码,若求第一次出现位次,将ans置为-1(为了区分第0位与无),打开语句3;
求可部分重叠KMP则打开语句2;
求不可重叠KMP则打开语句1.