using System.Collections.Generic;
public static void Main()
var shortestExample = Shortest("abbaaaaaaabbbbbabc");
Console.WriteLine(string.Join("\n\r",shortestExample));
private static string[] Shortest(string testString)
var k = SpecialSubstrings(testString);
var min = k.Min(x => x.Count);
return k.Where(x => x.Count == min).First().ToArray();
private static List<List<string>> SpecialSubstrings(string subString)
var subStrings = new List<List<string>>();
if (string.IsNullOrEmpty(subString))
subStrings.Add(new List<string>());
var firstChar = subString[0];
var startOfString = subString.Substring(0, pos+1);
foreach (var list in SpecialSubstrings(subString.Substring(pos + 1)))
list.Insert(0, startOfString);
pos = subString.IndexOf(firstChar, pos + 1);