program MergeOnOverlapProgram;
function MergeOnOverlap(a, b: string): string;
var
lenA, lenB, maxPossibleOverlapLen, overlap, i: Integer;
match: Boolean;
begin
lenA := Length(a);
lenB := Length(b);
if lenA < lenB then
maxPossibleOverlapLen := lenA
else
maxPossibleOverlapLen := lenB;
overlap := 0;
{ try longest overlap first }
for i := maxPossibleOverlapLen downto 1 do
begin
match := Copy(a, lenA - i + 1, i) = Copy(b, 1, i);
if match then
begin
overlap := i;
Break;
end;
end;
{ result = a + (b minus overlap) }
MergeOnOverlap := a + Copy(b, overlap + 1, lenB - overlap);
end;
var
s: string;
begin
s := MergeOnOverlap(
'fantasy time travel technology',
'technology extraterrestrial life'
);
WriteLn(s);
end.
(*
run:
fantasy time travel technology extraterrestrial life
*)