Для решения данной задачи можно использовать алгоритм двух указателей (sliding window). Идея заключается в создании окна, которое будет представлять собой текущий подстроку без повтора символов. Мы будем продвигать правый указатель по строке и добавлять новые символы в наше окно, пока не найдем повторяющийся символ. Когда мы обнаруживаем повторяющийся символ, мы продвигаем левый указатель до тех пор, пока удаляем все повторяющиеся символы из нашего окна. Вот как это может быть реализовано на Java: public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>(); // множество для хранения уникальных символов int left = 0; // левый указатель int right = 0; // правый указатель int maxLen = 0; // длина максимальной подстроки без повтора символов while (right < s.length()) { // пока правый указатель не достиг конца строки // если символ не повторяется, добавляем его в множество и расширяем окно if (!set.contains(s.charAt(right))) {