185 / 205
LeetCode · HardQiyin30 ball· ~40 daqiqa

Remove Duplicate Letters

Sizga kichik ingliz harflaridan tuzilgan s satri berilgan. Ushbu satrdan takrorlanuvchi harflarni shu tartibda olingki, hosil bo'lgan satrda har bir harf aynan bir marta qatnashsin va u barcha mumkin bo'lgan natijalar ichida leksikografik jihatdan eng kichigi bo'lsin.

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

Misollar

kod
Input: s = "bcabc"
Output: "abc"
kod
Input: s = "cbacdcbc"
Output: "acdb"
kod
Input: s = "a"
Output: "a"
kod
Input: s = "ecbacba"
Output: "eacb"

Maslahatlar

  1. Monotonik stek (stack) g'oyasidan foydalaning: natijaviy satrni harf-harf quring va har bir harfning satrda oxirgi marta qayerda uchrashini oldindan bilib oling.
  2. Har bir belgi uchun: agar u allaqachon stekda bo'lsa o'tkazib yuboring. Aks holda, stekning tepasidagi harf joriy harfdan katta bo'lsa VA o'sha tepadagi harf satrning qolgan qismida yana uchraydigan bo'lsa (ya'ni uning lastIndex joriy pozitsiyadan katta bo'lsa), uni stekdan chiqarib tashlang — shu shartlarga mos kelmay qolguncha bu jarayonni takrorlang, so'ng joriy harfni stekka qo'shing.