178 / 205
LeetCode · HardQiyin30 ball· ~40 daqiqa

Minimum Window Substring

Sizga ikkita s va t satrlari berilgan. s satrining ichidan shunday eng qisqa qism satrni topingki, u t satridagi barcha belgilarni (jumladan takrorlanganlarini ham) o'z ichiga olsin. Agar bunday qism satr mavjud bo'lmasa, bo'sh satr "" ni qaytaring.

Test keyslar shunday tuzilganki, har doim faqat bitta yagona to'g'ri javob mavjud bo'ladi.

example.go
func solve(s string, t string) string {
    // ...
}

Misollar

kod
Input: s = "ADOBECODEBANC", t = "ABC"
Output: "BANC"
Tushuntirish: Barcha 'A', 'B' va 'C' harflarini o'z ichiga olgan eng qisqa qism satr bu "BANC".
kod
Input: s = "a", t = "a"
Output: "a"
kod
Input: s = "a", t = "aa"
Output: ""

Maslahatlar

  1. Bu "sirg'anuvchi oyna" (sliding window) masalasi — ikkita ko'rsatkich (left, right) bilan oynani kengaytirib-toraytirib, oyna ichida t dagi barcha belgilar yetarli miqdorda mavjudligini kuzatib boring.
  2. t dagi har bir belgi uchun kerakli sonini xesh-jadvalda saqlang. right ni oshirib oynani kengaytiring va oyna ichidagi hisoblagichni yangilang; qachonki oyna talab qilingan barcha belgilarni yetarlicha o'z ichiga olsa (masalan, "formed == required" turdagi hisoblagich orqali tekshiring), left ni imkon qadar o'ngga siljitib oynani toraytiring va har safar joriy oyna uzunligini eng yaxshi natija bilan solishtiring.