public static class StringExtensions
public static string ReverseWordOrder(this string input)
return string.Join(' ', input.Split(' ').Reverse());
public static string ReverseWordOrderOptimized(this string input)
Span<char> output = stackalloc char[input.Length];
int lastSpace = input.Length - 1;
for (int i = input.Length - 1; i >= -1; i--)
if (i == -1 || input[i] == ' ')
for (int k = i + 1; k <= lastSpace; k++)
return new string(output);
private static readonly (string Input, string Expected)[] Cases =
("Simple test", "test Simple"),
("Lorem ipsum dolor sit amet", "amet sit dolor ipsum Lorem")
RunTests(StringExtensions.ReverseWordOrderOptimized);
static void RunTests(Func<string, string> method)
foreach (var test in Cases)
var actual = method(test.Input);
var result = actual.Equals(test.Expected);
Console.WriteLine($"\"{test.Input}\": OK");
Console.WriteLine($"\"{test.Input}\": Fail (expected: \"{test.Expected}\", actual: \"{actual}\")");
Console.WriteLine($"\"{test.Input}\": Fail with exception:\r\n{ex}");