День 80
Nikita Nikler
9 января 2025, 06:40

В следующей задаче мне требовалось от полученной строки вычислить максимальную длину подстроки с уникальными символами.

Здесь наблюдается некоторое сходство в мышлении над задачей ,которую я описывал в teletype. Суть в том ,что я на каждой итерации обхода проверяю ,не было ли текущего символа в хешмапе. И если он есть ,я двигаю указатель left на значение из хешмапы по этому символу. В хешмапе ключи - это символы ,а значения - индексы ,на которых в последний раз встречался этот символ.

Далее максимальное значение подстроки вычисляется как максимум от последнего вычисленного максимума и текущей разницы между i (индексом текущей итерации) и указателем left.

Суть в том ,что каждый раз ,встречая символ ,который уже был ранее ,я как бы перестаю учитывать все то ,что было левее него ,включая его самого. Таким образом посредством указателей left и i формируется окно или отрезок ,который гарантировано содержит уникальные символы.

Но мое решение проходило не все тесты. Как оказалось недостаточно просто проверить наличие символа в хешмапе ,чтобы обновить указатель left. Нужно еще проверить ,чтобы он всегда двигался вправо! Ведь может быть ситуация ,когда символ стоял левее текущего указателя left ,и тогда логика нарушится. Этот момент я упустил ,а так мышление было в правильном направлении.

На задачу ушел 1 час ,и по правилам ,которые я себе придумал (уделять на честное решение не более часа) ,я прервал акт насилия над своим мозгом и полез в chatgpt спрашивать ,где у меня ошибка. В общем с одной стороны радует ,что изначально я сообразил общий алгоритм ,но не радует ,что упустил детали ,до которых не додумался даже после анализа упавших тестов. А когда получаешь подсказку ,вроде таким простым это кажется..

Вообще говоря ,тема хешей очень странно подана на яндексе. В теории по большому счету описывались алгоритмы построения хеш-функций. И только одна задача разбиралась в теории - 3-sum. Как мне кажется ,этого недостаточно ,чтобы подготовить к решению подобных задач. Я думаю ,что в теории должно разбираться больше задач из этой классификации ,а затем даваться примеры +- похожие на эти ,но требующие доработок или поданные под другими условиями ,где нужно разглядеть уже показанные в теории паттерны решений. А так как будто получается ,что кидают в воду ,чтобы научить плавать ,но бултыхайся сам как говорится. С одной стороны это побуждает разобраться в вопросе самому ,что хороший поинт для сеньора. С другой - зачем тогда курс. В общем пока с подсказками потихоньку решаются задачи.

Нравится? Расскажите друзьям!
Михаил09.01.2025

отличный отчет!

Ответить
Nikita Nikler09.01.2025

Михаил, спасибо

Ответить
Gene10.01.2025

супер!

Ответить
Комментировать
Перейти к записи в ленте
Цель

Вы тоже можете
опубликовать свою
цель здесь

Мы поможем вам ее достичь!

310 000

единомышленников

инструменты

для увлекательного достижения

Присоединиться
Регистрация

Регистрация

Уже зарегистрированы?
Быстрая регистрация через соцсети
Вход на сайт

Входите.
Открыто.

Еще не зарегистрированы?
 
Войти через соцсети
Забыли пароль?