AABBAABA ergibt sogar 5, was ebenfalls falsch ist.
möglich wäre höchstens noch sowas,
Result := Length(S) - Length(StringReplace(S, Ch + Ch, Ch, [rfReplaceAll]));
wobei man dieses auch wieder in 'ner Schleife durchgehen müßte, da StringReplace das Ersetzungsergebnis nicht wieder in den nächsten Suchvorgang mit einbezieht:
Delphi-Quellcode:
Temp := S;
Repeat
Temp2 := Temp;
Temp := StringReplace(Temp, Ch + Ch, Ch, [rfReplaceAll]));
Until Temp = Temp2;
Result := Length(S) - Length(Temp);
wobei ich dennoch einen Code empfehlen würde, wo der String nicht (intern) verändert wird ... unnötige String-/Speicheroperationen müssen ja nicht sein.