Поиск в строке неизвестных подстрок, удовлетворяющих заданным условиям [не решено]

Задача: 

Условие
Дана текстовая строка, состоящая из заглавных латинских букв. Требуется найти подстроку из трёх букв, которая встречается в данной строке чаще всего. Например, в строке DEFDEFABCABCZABCDEFDEF чаще всего (4 раза) встречается подстрока DEF.

Формат входного файла
Входной файл содержит текстовую строку.

Формат выходного файла
Выходной файл должен содержать единственное число — количество вхождений самой часто встречающейся подстроки из трёх букв.

Ограничения
Длина исходной строки от 3 до 1000000 символов.

Комментарии

program name;var t1, t2:

program name;
 
var
 t1, t2: text;
 n, i, j, k: integer;
 s, s1, s2: string;
 
begin
 Assign(t1, 'D:\Users\Пользователь\Desktop\1.txt');
 Assign(t2, 'D:\Users\Пользователь\Desktop\2.txt');
 reset(t1);
 rewrite(t2);
 read(t1, s);
 k := 0;
  for i := 1 to length(S) - 2 do 
   begin
    s1 := copy(s, i, 3);
    for j := 1 to length(s) - 2 do 
     begin
      s2 := copy(s, j, 3);
      if s2 = s1 then inc(k);;
     end;
    if k > n then n := k;
    k := 0;
   end;
 write(t2, n);
 close(t1);
 close(t2);
end.

Файлы, учебное расписание, задача, помогите решить.

Дан файл с учебным расписанием на неделю, нужно написать программу которая находит количество лекционных, практических и лабораторных . Вывести количество на экран.

Решение

1. Дана строка символов

1. Дана строка символов длиною n. Требуется заменить в ней группу букв
foot группой букв feet.
2. Дана строка символов. Известно, что первый символ строки отличен от
пробела и что в строке имеется хотя бы один пробел. Рассматривается
подстрока символов, предшествующих первому пробелу (местоположение
первого пробела заранее неизвестно). Преобразовать данную подстроку, удалив
из каждой группы цифр, которой не предшествует точка, все начальные нули
(кроме последнего, если за ним идет точка).

Решение

program z;
var s,a,b,f:string;
n,i,j,m,c:integer;
begin
readln(s);
for i:=1 to length(s)-2 do begin
        a:=copy(s,i,3);
        n:=0;
        for j:=1 to length(s)-2 do begin
                b:=copy(s,j,3);
                if a=b then n:=n+1;
                end;
        if n>m then begin m:=n; f:=a; end;
        end;
writeln(f,' ',m);
readln;
end.

Объясните что совершается в

Объясните что совершается в этих строчках:
for i:=1 to length(s)-2 do begin
a:=copy(s,i,3);
n:=0;

перебираются по порядку все

перебираются по порядку все комбинации из 3-х символов в исходной строке s, эти комбинации по очереди помещаются в переменную а. n служит счетчиком комбинаций, которые встречаются чаще всего