level 14
ryf19960310
楼主
program KMP;
var
next:array[1..500000]of longint;
s1,s2:ansistring;
ii:longint;
procedure getnext(t:ansistring);
var
j,k:longint;
begin
j:=1; k:=0;
while j<Length(t) do
begin
if (k=0)or(t[j]=t[k]) then begin inc(j); inc(k); next[j]:=k; end else k:=next[k];
end;
end;
function find(s:ansistring;t:ansistring):longint;
var
i,j:longint;
begin
getnext(t);
find:=0;
i:=1; j:=1;
while (i<=Length(s)) and (j<=Length(t)) do
begin
if (j=0)or(s[i]=t[j]) then begin inc(i); inc(j); end else j:=next[j]; if j>length(t) then find:=i-Length(t);
end;
end;
begin
write('s=');
readln(s1);
write('t=');
readln(s2);
ii:=find(s1,s2);
if ii<>0 then begin writeln('Found ',s2,' in ',s1,' at ',ii); end else Writeln('Cannot find ', s2,' in ',s1);
end.
其实是百度百科上的我改了一下= =
2012年03月20日 11点03分
1
var
next:array[1..500000]of longint;
s1,s2:ansistring;
ii:longint;
procedure getnext(t:ansistring);
var
j,k:longint;
begin
j:=1; k:=0;
while j<Length(t) do
begin
if (k=0)or(t[j]=t[k]) then begin inc(j); inc(k); next[j]:=k; end else k:=next[k];
end;
end;
function find(s:ansistring;t:ansistring):longint;
var
i,j:longint;
begin
getnext(t);
find:=0;
i:=1; j:=1;
while (i<=Length(s)) and (j<=Length(t)) do
begin
if (j=0)or(s[i]=t[j]) then begin inc(i); inc(j); end else j:=next[j]; if j>length(t) then find:=i-Length(t);
end;
end;
begin
write('s=');
readln(s1);
write('t=');
readln(s2);
ii:=find(s1,s2);
if ii<>0 then begin writeln('Found ',s2,' in ',s1,' at ',ii); end else Writeln('Cannot find ', s2,' in ',s1);
end.
其实是百度百科上的我改了一下= =