Hallo hier mal als Denkansatz, so wie ich das Problem verstanden habe:
Array heißt bei mir das Hauptarray, das irgendwie übergeben wird oder global ist.
Tiefe, hier :=5 ist die maximale Ketten-Tiefe.
Edit: Statt der InListe-Funktion kann man auch eine Find-Funktion o.ä. der TStringList nehemn. Hab gerade kein Delphi, drum weiß ich nit, obs da was gab und wie das dann ggf. heißt.
Edit: Achja, hab vergessen die Ergebnisse auszugeben, die ja dann in den beiden Stringlisten stehen.
Delphi-Quellcode:
var:
i, j, k, l :Integer;
Tiefe : Integer;
Kette : String
Kettenliste:TStringlist;
Anzahlliste:TStringlist;
function InListe(const KT : String):Boolean;
begin
Result:=false;
For l = 0 To Kettenliste.Count-1 do
if Kettenliste[l]=Kette then Result:=true;
end
function Vorkommenszahl(const KT : String):Integer;
begin
//Die Funktion ist mir aus dem Kopf zu kompliziert:
//Kette in Elemente zerlegen, Anz. Elemente bestimmen
//Elemente in DynArray speichern
//Das "Hauptarray" Array durchgehen und in Schleifen mit den Elementen von DynArray vergleichen
//Wenn passende Kette gefunden wird einen Counter hochgezählt
end
begin
Tiefe:=5;
Kettenliste:=TStringlist.Create(nil);
Anzahlliste:=TStringlist.Create(nil);
For i:=0 To Array.Count-1 do
begin
For j:=0 To Tiefe-1 do
begin
Kette:='';
For k = 0 to j do
Kette:=Kette+IntToStr(Array[i+k])+';';
if not InListe(Kette) then
begin
Kettenliste.Add(Kette);
Anzahlliste.Add(IntToStr(Vorkommenzahl(Kette)))
end;
end;
end;
end;