Почему условие «if (need[c] > 0)» приводит к некорректному результату в алгоритме скользящего окна? [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Почему условие «if (need[c] > 0)» приводит к некорректному результату в алгоритме скользящего окна? [закрыто]

Сообщение Anonymous »

Почему добавление условия Need[c] > 0 нарушает мой алгоритм скользящего окна для подстроки минимального окна?
Я решаю задачу LeetCode 76 по подстроке минимального окна. Я обнаружил что-то очень странное.
Описание задачи:
Для заданных строк s и t найти минимальное окно в s, которое будет содержать все символы из t.
Тестовый пример:
  • s = "ADOBECODEBANC"
  • t = "ABC"
  • Ожидаемый результат: «BANC»
Странное поведение:
  • Когда я использую алгоритм скользящего окна БЕЗ проверки необходимости[c] > 0, он правильно возвращает «BANC».
  • Когда я добавляю условие «if (need[c] > 0)», он возвращает «ADOBEC», который неправильно.
Условие Need[c] > 0 должно быть безобидным, потому что:
  • Для символов, отличных от t, нужно[c] == 0
  • Эти символы никогда не влияют на num или maxnum
  • Поэтому пропуск ne[c]++ для них ничего не изменит
Но результаты теста показывают, что это действительно меняет результат. Почему?
Я проверил это как на локальной Java, так и на LeetCode, и оба показывают один и тот же неверный результат с необходимостью[c] > 0.
Вот соответствующий раздел кода с проверкой необходимости[c] > 0:
while (right < y.length) {
char c = y[right];
right++;

if (need[c] > 0) {
ne[c]++;
if (ne[c] == need[c]) {
num++;
}
}

while (num == maxnum) {
if (right - left < finum) {
finum = right - left;
minleft = left;
}

char mm = y[left];
if (ne[mm] == need[mm]) {
num--;
}
ne[mm]--;
left++;
}
}

Вернуться в «JAVA»