program KMP(input, output);
var
fail:array[1..1000] of longint ;
s1,s2:string;
{==============================================}
procedure find;
var
i,j:longint;
begin
fail[1]:=0;
j:=fail[1];
for i:=2 to length(s2) do
begin
while (j > 0) and (s2[j + 1] <> s2[i]) do j:=fail[j];
if s2[j + 1] = s2[i] then inc(j);
fail[i]:=j;
end;
end;
{==============================================}
procedure solve;
var
i,j:longint;
begin
j:=0;
for i:=1 to length(s1) do
begin
while (j > 0) and (s2[j + 1] <> s1[i]) do j:=fail[j];
if s2[j + 1] = s1[i] then inc(j);
if j = length(s2) then
begin
writeln(i - j + 1);
j:=fail[j];
end;
end;
end;
{==============================================}
procedure init;
begin
readln(s1);
readln(s2);
end;
{==============================================}
begin
init;
find;
solve;
end.
KMP算法
最新推荐文章于 2024-11-16 09:45:51 发布
本文详细介绍了一种高效的字符串匹配算法——KMP算法,并提供了完整的Pascal语言实现代码。该文通过两个核心过程:预处理模式串生成next数组和匹配主串完成模式匹配。适合于需要深入理解并应用KMP算法解决实际问题的学习者。
10万+

被折叠的 条评论
为什么被折叠?



