您的位置:首页 > 其它

{模版}KMP字符串匹配

2016-11-09 22:02 204 查看
出自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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp