Data una stringa devo vedere in che indizi è presente, funziona con

occhio
ginocchio

pascal
il fu mattia pascal

ma se devo mettere più cirrispondenze come

pascal
il fu mattia pascal non c'entra con pascal

mi spara, logicamente, tutte le posizioni, a me serve solo l'indice di partenza del primo e del secondo pascal.

Ho cercato altri algoritmi ma sono con hash e altre cose che al momento non mi servono; mi basta un forza bruta simile a quello qui sotto:

codice:
program StringMatching;
uses crt, strings;

const
 maxdim=50;

var
 cosa,dove:string[maxdim];
 i,j,dimCosa,dimDove:integer;
 start:char;

procedure trovaStr;
 begin
  dimCosa:=length(cosa);
  dimDove:=length(dove);
  i:=1;
   for j:= 0 to (dimDove-dimCosa) do
    begin
     while (i < dimCosa) and (cosa[i] = dove[i+j]) do
      i:=i+1;
     if i >= dimCosa then
      writeln('Corrispondenza trovata dalla posizione ', j);
    end;
 end;


begin
 clrscr;
 writeln('Questo programma cerca tutte le corrispondenze di una stringa in');
 writeln('un''altra. Premi un tasto per iniziare...');
 readln(start);
 clrscr;
 writeln('Inserire striga da cercare, lunghezza massima ', maxdim, ': ');
 readln(cosa);
 writeln('Inserire dove cercare, lunghezza massima ', maxdim, ': ');
 readln(dove);
 trovaStr;
 writeln('Premi un tasto per uscire');
 readln
end.
ciao grazie