pascal kmp板子

P[1]:=0;
j:=0;
for i:=2 to m do
begin
while (j>0) and (B[j+1]<>B[i]) do 
j:=P[j];
   if B[j+1]=B[i] then j:=j+1;  
P[i]:=j;
end;


j:=0;
for i:=1 to n do
begin 
while (j>0) and (B[j+1]<>A[i]) do j:=P[j]; 
if B[j+1]=A[i] then j:=j+1;  
if j=m
then begin 
     writeln('Pattern occurs with shift ',i-m);      
j:=P[j]; 
end;
end;



posted @ 2017-01-18 09:33  zinol  阅读(88)  评论(0编辑  收藏  举报