Falls das mit dem "verständlich" wirklich ernst gemeint war:
Deine Lösung ist unnötig komplex. Sie ist grob geschätzt dreimal so lang wie die Lösung, auf die Phreak93 am Ende selbst gekommen ist. Glaubst du, der zusätzliche Code schafft irgendwie mehr Verständnis?
In Phreak93s Code kann man Fehler viel leichter finden. Die Fehler in deinem Code findet man nicht so leicht. Dass dein eigener Test diese Fehler nicht findet, spricht Bände.
Du hast also (geschätzt) dreimal solange gebraucht, um eine dreimal so lange Lösung zu finden, die nicht nur nicht funktioniert, sondern auch schlechter wartbar ist.
Nur ein Beispiel: So etwas hier:
String result = String.Empty;
result = String.Concat(firstCharacter, new String(charactersInBetween.ToArray()), lastCharacter);
return result;
[/code]
ist unnötiger Ballast, wenn es das auch tut:
[code]return String.Concat(firstCharacter, new String(charactersInBetween.ToArray()), lastCharacter);
Die Funktion tut eigentlich nichts anderes, als ihre Argumente zu konkatenieren. Braucht man dafür wirklich eine eigene Funktion?