字符串处理基础算法-KMP

来源:互联网 发布:有答案中级java面试题 编辑:程序博客网 时间:2024/05/18 03:15

复杂度 O(n)

program pro;var        p:array[0..100]of longint;        po:array[0..100]of longint;        ans,l1,l2,i,j,k:longint;        s1,s2:ansistring;begin        readln(s1);        readln(s2);        l1:=length(s1);        l2:=length(s2);        p[1]:=0; j:=0;//预处理:找出p数组        for i:= 2 to l2 do        begin                while (j>0)and(s2[i]<>s2[j+1]) do j:=p[j];                if s2[i]=s2[j+1] then inc(j);                p[i]:=j;        end;        ans:=0;//寻找相同        j:=0;        for i:=1 to l1 do        begin                while (j>0)and(s1[i]<>s2[j+1]) do j:=p[j];                if s1[i]=s2[j+1] then inc(j);                if j=l2 then                begin                        inc(ans);                        po[ans]:=i-l2+1;                        j:=p[j];                end;        end;        writeln(ans);        for i:=1 to ans do writeln(po[i]);end.


0 0
原创粉丝点击