{模版}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.
浙公网安备 33010602011771号