TGViewer
PHP | LeetCode PHP | LeetCode @easy_php_task · 1.33K subscribers
Post #1199 118
Задача: 76. Minimum Window Substring
Сложность: hard

Даны две строки s и t длиной m и n соответственно. Верните наименьшую подстроку строки s так, чтобы каждый символ из строки t (включая дубликаты) входил в эту подстроку. Если такой подстроки не существует, верните пустую строку "".

Тестовые примеры будут сформированы таким образом, что ответ будет уникальным.

Пример:
Input: s = "ADOBECODEBANC", t = "ABC"
Output: "BANC"
Explanation: The minimum window substring "BANC" includes 'A', 'B', and 'C' from string t.


👨‍💻 Алгоритм:

1⃣Мы начинаем с двух указателей, left и right, которые изначально указывают на первый элемент строки S.

2⃣Мы используем указатель right для расширения окна до тех пор, пока не получим желаемое окно, т.е. окно, которое содержит все символы из T.

3⃣Как только у нас есть окно со всеми символами, мы можем передвигать указатель left вперёд по одному. Если окно по-прежнему желаемое, мы продолжаем обновлять размер минимального окна. Если окно больше не желаемое, мы повторяем шаг 2 и далее.

😎 Решение:
function minWindow($s, $t) {
if (strlen($s) === 0 || strlen($t) === 0) {
return "";
}

$dictT = [];
for ($i = 0; $i < strlen($t); $i++) {
$char = $t[$i];
if (!array_key_exists($char, $dictT)) {
$dictT[$char] = 0;
}
$dictT[$char]++;
}

$required = count($dictT);
$l = 0;
$r = 0;
$formed = 0;
$windowCounts = [];
$ans = [-1, 0, 0];

while ($r < strlen($s)) {
$c = $s[$r];
if (!array_key_exists($c, $windowCounts)) {
$windowCounts[$c] = 0;
}
$windowCounts[$c]++;

if (array_key_exists($c, $dictT) && $windowCounts[$c] === $dictT[$c]) {
$formed++;
}

while ($l <= $r && $formed === $required) {
$c = $s[$l];
if ($ans[0] === -1 || $r - $l + 1 < $ans[0]) {
$ans = [$r - $l + 1, $l, $r];
}

$windowCounts[$c]--;
if (array_key_exists($c, $dictT) && $windowCounts[$c] < $dictT[$c]) {
$formed--;
}
$l++;
}
$r++;
}

return $ans[0] === -1 ? "" : substr($s, $ans[1], $ans[2] - $ans[1] + 1);
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_php_task
  1. Oct 13, 2026Задача: 899. Orderly Queue Сложность: hard Вам дана строка s и целое число k. Вы можете вы…
  2. Oct 11, 2026Задача: 913. Cat and Mouse4 Сложность: hard В игру на неориентированном графе играют два и…
  3. Oct 9, 2026Задача: 71. Simplify Path Сложность: medium Дан абсолютный путь для файловой системы в сти…
  4. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для PHP разработчика, которые нигде больше не публ…
  5. Oct 6, 2026Задача: 166. Fraction to Recurring Decimal Сложность: medium Даны два целых числа, предста…
  6. Oct 5, 2026Задача: 1024. Video Stitching Сложность: medium Вам дана серия видеоклипов со спортивного…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →