KMP

int[] getNext(String ps){
    next[0]=-1;
    int j=0;
    int k=-1;
    while(j<p.length-1){
		if(k==-1||p[j]==p[k]){
			if(p[++j]==p[++k]){
				next[j]=next[k];
			}
			else{
				next[j]=k;
			}
		}
		else{
           k=next[k];
       }
    }
    return next;
}
int KMP(String ts,String ps){
    int i=0,j=0;
    int[] next=getNext(ps);
    while(i<t.length&&j<p.length){
		if(j==-1||t[i]==p[j]){
			i++;
			j++;
		}
		else{
			j=next[j];
		}
    }
    if(j==p.length){
		return i-j;
    }
	else{
		return -1;
    }
}
posted @ 2019-07-16 15:08  prestige  阅读(108)  评论(0编辑  收藏  举报