171 / 205
LeetCode · HardQiyin30 ball· ~40 daqiqa

Longest valid parentheses

Faqatgina ( va ) belgilaridan iborat s satri berilgan. Undagi to'g'ri (yaroqli) ochilib-yopilgan eng uzun qavslar ketma-ketligi uzunligini toping.

"Yaroqli" — har bir ochuvchi qavsga mos yopuvchi qavs bor va ular to'g'ri joylashgan. Qism-satr ketma-ket joylashgan bo'lishi kerak. Yaroqli qism-satr bo'lmasa, javob 0.

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

Misollar

kod
Input: s = ")()())"
Output: 4
Tushuntirish: Eng uzun yaroqli qism-satr - "()()".
kod
Input: s = "(()"
Output: 2
kod
Input: s = ""
Output: 0

Maslahatlar

  1. Qavslarning o'zini emas, balki ularning INDEKSLARINI saqlaydigan stek (stack) ishlatishni o'ylab ko'ring — stekning tepasi doim "hozirgacha yaroqli bo'lmagan oxirgi chegara" indeksini bildirsin.
  2. Stekni -1 bilan boshlang (chegara sifatida). ( uchraganda uning indeksini stekka qo'shing. ) uchraganda stekdan bittani chiqaring: agar stek shundan keyin bo'sh qolsa, joriy indeksni yangi chegara sifatida stekka qo'shing; aks holda joriy indeks bilan stekning yangi tepasi orasidagi farq — shu nuqtada tugaydigan yaroqli qism-satr uzunligi, uni maksimal natija bilan solishtiring.