48 lines
1.1 KiB
Text
48 lines
1.1 KiB
Text
include "cowgol.coh";
|
|
include "strings.coh";
|
|
|
|
sub Contains(s1: [uint8], s2: [uint8]): (r: uint8) is
|
|
r := 0;
|
|
while [s1] != 0 loop
|
|
var a := s1;
|
|
var b := s2;
|
|
while [b] != 0 and [a] == [b] loop
|
|
a := @next a;
|
|
b := @next b;
|
|
end loop;
|
|
if [b] == 0 then
|
|
r := 1;
|
|
return;
|
|
end if;
|
|
s1 := @next s1;
|
|
end loop;
|
|
end sub;
|
|
|
|
sub LCS(s1: [uint8], s2: [uint8], outbuf: [uint8]) is
|
|
if StrLen(s1) < StrLen(s2) then
|
|
var temp := s1;
|
|
s1 := s2;
|
|
s2 := temp;
|
|
end if;
|
|
|
|
var maxlen := StrLen(s2);
|
|
var length := maxlen;
|
|
while length > 0 loop
|
|
var start: intptr := 0;
|
|
while start + length <= maxlen loop
|
|
MemCopy(s2 + start, length, outbuf);
|
|
[outbuf + length + 1] := 0;
|
|
if Contains(s1, outbuf) != 0 then
|
|
return;
|
|
end if;
|
|
start := start + 1;
|
|
end loop;
|
|
length := length - 1;
|
|
end loop;
|
|
[outbuf] := 0;
|
|
end sub;
|
|
|
|
var lcs: uint8[64];
|
|
LCS("thisisatest", "testing123testing", &lcs[0]);
|
|
print(&lcs[0]);
|
|
print_nl();
|