Максимальная подстрока и пустая строка

96
05 марта 2022, 05:10

Всем Привет!

Сделал программу и функцию в ней которая должна делать следующее, ищет в строке подстроку максимальной длины, состоящую из одного и того же символа, и выдает эту максимальную длину. Например, есть строка " аааббдеггггв ", должно выдаться число 4, потому что есть 4 подряд символа «г», и это максимальная подстрока, где подряд идет один и тот же символ. Функция работает без учета регистра.

Проблема возникает при наличии пустой строки или пробелов? программа выдаёт 1, как для случая отсутствия вообще одинаковых букв?

думал решить проблему с помощью метода char.IsWhiteSpace но у меня получается только для 1 пробела??

Подскажите пожалуйста как поправить код чтобы учитывал корректно пробелы и пустую строку?

    public static int GetMaxLengthSubstring(string s)
    {
        int length = 1;
        int maxLength = 1;
        s = s.ToUpper();
        for (int i = 1; i < s.Length; ++i)
        {
            char currentSymbol = s[i];
            char previousSymbol = s[i - 1];
            if (currentSymbol == previousSymbol)
            {
                length++;
                if (length > maxLength)
                {
                    maxLength = length;
                }
            }
            else
            {
                length = 1;
            }
        }
        return maxLength;
    }
    static void Main(string[] args)
    {
        Console.WriteLine("Длина максимальной подстроки в строке 45645555645456 = " + GetMaxLengthSubstring("45645555645456"));
        Console.WriteLine("Длина максимальной подстроки в строке аааббдеггггв = " + GetMaxLengthSubstring("аааббдеггггв"));
        Console.WriteLine("Длина максимальной подстроки в строке 112233555 = " + GetMaxLengthSubstring("112233555"));
        Console.WriteLine("Длина максимальной подстроки в строке Эйяфьятлайокудль = " + GetMaxLengthSubstring("Эйяфьятлайокудль"));
        Console.WriteLine("Длина максимальной подстроки в строке аааббдегГггв = " + GetMaxLengthSubstring("аааббдегГггв"));
        Console.WriteLine("Длина максимальной подстроки в строке аааббдегГггв = " + GetMaxLengthSubstring("  "));
        Console.ReadKey();
Answer 1

Используйте string.IsNullOrWhiteSpace:

public static int GetMaxLengthSubstring(string s)
{
    if (string.IsNullOrWhiteSpace(s))
    {
        return 0;
    }
    int length = 1;
    int maxLength = 1;
    //...
}

UPD. Для проверки символа в строке на пробельный используйте char.IsWhiteSpace(currentSymbol)

Answer 2
var text = "аааббдеггггв";
var count = 0;
foreach (var letter in text.Distinct().ToArray())
{
    var temp = text.Count(chr => chr == letter);
    if (count < temp)
        count = temp;
}
Console.WriteLine($"Максимальное количество подряд идущих букв {count}");

вот решение которое на много меньше по коду и работает правильно

Answer 3
public static int GetMaxLengthSubstring(string s)
{
    int length = 0, maxLength = 0;
    for (int i = 1; i < s.Length; ++i)
    {
        char currentSymbol = s[i];
        char previousSymbol = s[i - 1];
        if (currentSymbol == previousSymbol)
        {
            length++;
            if (length > maxLength)
                maxLength = length;
        }
        else
            length = 1;
    }
    return maxLength;
}
Console.WriteLine("Длина максимальной подстроки в строке Эйяфьятлайокудль = " + GetMaxLengthSubstring("аааббдеггггв ".ToLower()));
READ ALSO
Как из массива выбрать неповторяющиеся элементы

Как из массива выбрать неповторяющиеся элементы

Есть массив Buttons, из которого необходимо выбрать Mins чисел и занести это все в массив fakeButtons PS Желательно не через LINQ

125
Как использовать X509Certificate2 от пользователя?

Как использовать X509Certificate2 от пользователя?

Доброе время сутокПодскажите, написал небольшую программу для установки сертификатов УЦ в корневые и промежуточные центры, программа вылетает...

93
Помогите сделать подобный зум

Помогите сделать подобный зум

Подскажите, как сделать подобное на js? Есть картинка по наведению на которую появляется окно в увеличенным изображениемЭдакий эффект лупы

64