using System.Collections.Generic;
public static void Main()
Console.WriteLine(Capitalize(null) == null);
Console.WriteLine(Capitalize("-") == "-");
Console.WriteLine(Capitalize("y") == "Y");
Console.WriteLine(Capitalize("yo") == "Yo");
Console.WriteLine(Capitalize("yoo") == "Yoo");
Console.WriteLine(Capitalize("Y") == "Y");
Console.WriteLine(Capitalize("Yo") == "Yo");
Console.WriteLine(Capitalize("Yoo") == "Yoo");
Console.WriteLine(Capitalize("YoY") == "Yoy");
Console.WriteLine(Capitalize("Y M C A") == "Y M C A");
Console.WriteLine(Capitalize("Yo mama Cuts apple") == "Yo Mama Cuts Apple");
Console.WriteLine(Capitalize("Y-M C-A") == "Y-M C-A");
Console.WriteLine(Capitalize("Yo-mama Cuts-apple") == "Yo-Mama Cuts-Apple");
Console.WriteLine(Capitalize("Yo2o") == "Yo2O");
Console.WriteLine(Capitalize("MENÉNDEZ MENÉNDEZ Yoh") == "Menéndez Menéndez Yoh");
Console.WriteLine(Capitalize("STØRMER John") == "Størmer John");
public static string Capitalize(string input)
if (string.IsNullOrWhiteSpace(input))
var result = new List<char>{char.ToUpper(input[0])};
for (var i = 1; i < input.Length; i++)
result.Add(char.IsLetter(input[i]) && !char.IsLetter(input[i - 1])
: char.ToLower(input[i]));
return string.Concat(result);