论熟练掌握KMP的重要性

    xiaoxiao2021-08-17  116

    var a,b:array[1..100000] of char; next:array[0..100000] of longint; t:boolean; len1,len2,i,x:longint; ch:char; begin read(ch);len1:=0; while ord(ch)<>13 do begin inc(len1);a[len1]:=ch;read(ch); end;readln; read(ch);len2:=0; while ord(ch)<>13 do begin inc(len2);b[len2]:=ch;read(ch); end;readln; next[0]:=0;next[1]:=0; for i:=2 to len2 do begin x:=next[i-1]; while (x>0) and (b[x+1]<>b[i]) do x:=next[x]; if b[x+1]=b[i] then next[i]:=x+1 else next[i]:=0; end; t:=false;x:=0; for i:=1 to len1 do begin while (x>0) and (b[x+1]<>a[i]) do x:=next[x]; if b[x+1]=a[i] then inc(x); if x=len2 then begin t:=true;break; end; end; writeln(t); end.

    转载请注明原文地址: https://ju.6miu.com/read-676554.html

    最新回复(0)