Задачи
March 17

Задача. Наибольшая подстрока между двумя одинаковыми символами

Дана строка S. Верните длину самой длинной подстроки между двумя одинаковыми символами, исключая эти два символа. Если такой подстроки нет, то -1.

Справка: подстрока - это непрерывная последовательность символов в строке.

Пример: S = "abca"
Output: 2
Примечание: подстрока "bc"

Разбор

Для решения этой задачи используем наш любимый hash-map. В качестве ключа будет символ строки, а значение - это первый индекс, где мы втретили этот символ.

Тогда при проходе по строке, для символа, ктр уже есть в нашем hashMap мы вычислим длину подстроки и сравним с основной результирующей переменной.

Как всегда, смотрите детали релизации ниже.

Реализация

static int FindMaxLengthBetweenEqualCharacters(string s) {
    int maxLen = -1;
    var map = new Dictionary<char, int>();
    for (int i = 0; i < s.Length; i++)
    {
        if (!map.ContainsKey(s[i]))
        {
            map[s[i]] = i;
        }
        else 
        {
            maxLen = Math.Max(maxLen, i - map[s[i]] - 1);
        }
    }

    return maxLen;
}

https://gist.github.com/unilecs/ae7be8ad8c996e00cc69aa3cae9f303f

Play-test

https://dotnetfiddle.net/AwVgmf