Определить букву, встречающуюся чаще всего и количество её повторений. Если таких несколько вывести ту что раньше по алфавиту

В основном, я выполнил задачу, но вывести ту что по алфавиту раньше не получается. Помогите пожалуйста

        {
            string str = "morgana liliput katarakta fartuna sueta sleep";
            int max = 0;
            string symbol = "z";
            for (int i = 0; i < str.Length; i++) 
            {
                int check = 0;
                for (int j = 0; j < str.Length; j++)
                {
                    if(str[i].ToString() == " "){continue;}
                    if (str[i] == str[j])
                    {
                        check++;
                    }
                    if (check > max)
                    {
                        max = check;
                        symbol = str[i].ToString();
                        }
                    }
                }
            }
            Console.WriteLine($"Cамая часто встречающаяся буква <<{symbol}>> она повторяется {max} раз");
        }

Ответы (2 шт):

Автор решения: Yotic
string result = "morgana liliput katarakta fartuna sueta sleep"
    .Where(z => char.IsLetter(z))
    .GroupBy(z => z)
    .OrderBy(c => c.Key)
    .ToDictionary(grp => grp.Key, grp => grp.Count())
    .ToList()
    .OrderBy(z => z.Value)
    .Last()
    .ToString();
→ Ссылка
Автор решения: iKuzmychov

Достаточно просто добавить свой компаратор и Linq-запрос уменьшиться в разы и станет намного эффективнее, чем код @Yotic.

Компаратор:

public class LettersComparer : IComparer<IGrouping<char, char>>
{
    public int Compare(IGrouping<char, char>? x, IGrouping<char, char>? y)
    {
        if (x is null)
            throw new ArgumentNullException(nameof(x));

        if (y is null)
            throw new ArgumentNullException(nameof(y));
    
        if (x.Count() == y.Count()) // если количество символов одинаковое - "большим" из них счиатется тот, что раньше по алфавиту
        {
            if (x.Key == y.Key)
                return 0;
            else if (x.Key < y.Key)
                return 1;
            else
                return -1;
        }
        else if (x.Count() > y.Count())
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
}

Код:

var text    = "morgana liliput katarakta fartuna sueta sleep";
var letters = text.Where(symbol => char.IsLetter(symbol));

if (letters.Any())
{
    var result = letters
        .GroupBy(letter => letter)
        .MaxBy(group => group, new LettersComparer())!;

    var letter = result.Key;
    var count  = result.Count();

    Console.WriteLine($"Наиболее повторяемая буква - {letter} ({count} повторений).");
}
else
{
    Console.WriteLine($"В заданном тексте нет букв.");
}
→ Ссылка