{模版}KMP字符串匹配

出自Farmer_John_LYH(膜拜膜拜)

判断B串是否为A串的字串
如果是,输出x使A[x..x+m−1]=B[1..m]
const
maxn=1000;
maxm=1000;
var
n,m:longint;
i,j,l:longint;
a,b:ansistring;
p:array[0..maxm] of longint;
begin
assign(input,’x.in’);reset(input);assign(output,’x.out’);rewrite(output);
readln(a);n:=length(a);
readln(b);m:=length(b);
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 inc(j);
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 inc(j);
            if(j=m)then
            begin
                    writeln('Yes ',i-m+1);
                    halt;
            end;
    end;
    writeln('No');

end.

posted @ 2016-11-09 22:02  Gxyhqzt  阅读(134)  评论(0)    收藏  举报