{模版}KMP字符串匹配

来源:互联网 发布:奇异淘宝小店书包网 编辑:程序博客网 时间:2024/06/18 05:53

出自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.

0 0
原创粉丝点击